Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys Fix ipsecif(4) IPV6_MINMTU does not work correctly.
details: https://anonhg.NetBSD.org/src/rev/ce6946c4fb0f
branches: trunk
changeset: 846128:ce6946c4fb0f
user: knakahara <knakahara%NetBSD.org@localhost>
date: Fri Nov 01 04:23:21 2019 +0000
description:
Fix ipsecif(4) IPV6_MINMTU does not work correctly.
diffstat:
sys/netinet6/ip6_forward.c | 6 +++---
sys/netinet6/ip6_output.c | 6 +++---
sys/netipsec/ipsec.h | 4 ++--
sys/netipsec/ipsec6.h | 4 ++--
sys/netipsec/ipsec_output.c | 26 +++++++++++++-------------
sys/netipsec/xform.h | 5 +++--
sys/netipsec/xform_ah.c | 12 +++++++-----
sys/netipsec/xform_esp.c | 12 +++++++-----
sys/netipsec/xform_ipcomp.c | 14 ++++++++------
sys/netipsec/xform_ipip.c | 6 +++---
sys/netipsec/xform_tcp.c | 6 +++---
11 files changed, 54 insertions(+), 47 deletions(-)
diffs (truncated from 471 to 300 lines):
diff -r 4dfb4cf6bfac -r ce6946c4fb0f sys/netinet6/ip6_forward.c
--- a/sys/netinet6/ip6_forward.c Fri Nov 01 02:58:50 2019 +0000
+++ b/sys/netinet6/ip6_forward.c Fri Nov 01 04:23:21 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ip6_forward.c,v 1.97 2019/09/19 04:08:29 ozaki-r Exp $ */
+/* $NetBSD: ip6_forward.c,v 1.98 2019/11/01 04:23:21 knakahara Exp $ */
/* $KAME: ip6_forward.c,v 1.109 2002/09/11 08:10:17 sakane Exp $ */
/*
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip6_forward.c,v 1.97 2019/09/19 04:08:29 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip6_forward.c,v 1.98 2019/11/01 04:23:21 knakahara Exp $");
#ifdef _KERNEL_OPT
#include "opt_gateway.h"
@@ -261,7 +261,7 @@
*/
if (needipsec) {
int s = splsoftnet();
- error = ipsec6_process_packet(m, sp->req);
+ error = ipsec6_process_packet(m, sp->req, 0);
splx(s);
/* m is freed */
if (mcopy)
diff -r 4dfb4cf6bfac -r ce6946c4fb0f sys/netinet6/ip6_output.c
--- a/sys/netinet6/ip6_output.c Fri Nov 01 02:58:50 2019 +0000
+++ b/sys/netinet6/ip6_output.c Fri Nov 01 04:23:21 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ip6_output.c,v 1.220 2019/05/15 02:59:18 ozaki-r Exp $ */
+/* $NetBSD: ip6_output.c,v 1.221 2019/11/01 04:23:21 knakahara Exp $ */
/* $KAME: ip6_output.c,v 1.172 2001/03/25 09:55:56 itojun Exp $ */
/*
@@ -62,7 +62,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip6_output.c,v 1.220 2019/05/15 02:59:18 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip6_output.c,v 1.221 2019/11/01 04:23:21 knakahara Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -477,7 +477,7 @@
#ifdef IPSEC
if (needipsec) {
int s = splsoftnet();
- error = ipsec6_process_packet(m, sp->req);
+ error = ipsec6_process_packet(m, sp->req, flags);
splx(s);
/*
diff -r 4dfb4cf6bfac -r ce6946c4fb0f sys/netipsec/ipsec.h
--- a/sys/netipsec/ipsec.h Fri Nov 01 02:58:50 2019 +0000
+++ b/sys/netipsec/ipsec.h Fri Nov 01 04:23:21 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ipsec.h,v 1.88 2019/06/12 22:23:50 christos Exp $ */
+/* $NetBSD: ipsec.h,v 1.89 2019/11/01 04:23:21 knakahara Exp $ */
/* $FreeBSD: ipsec.h,v 1.2.4.2 2004/02/14 22:23:23 bms Exp $ */
/* $KAME: ipsec.h,v 1.53 2001/11/20 08:32:38 itojun Exp $ */
@@ -318,7 +318,7 @@
int ipsec4_common_input_cb(struct mbuf *, struct secasvar *, int, int);
int ipsec4_process_packet(struct mbuf *, const struct ipsecrequest *, u_long *);
int ipsec_process_done(struct mbuf *, const struct ipsecrequest *,
- struct secasvar *);
+ struct secasvar *, int);
struct mbuf *m_clone(struct mbuf *);
struct mbuf *m_makespace(struct mbuf *, int, int, int *);
diff -r 4dfb4cf6bfac -r ce6946c4fb0f sys/netipsec/ipsec6.h
--- a/sys/netipsec/ipsec6.h Fri Nov 01 02:58:50 2019 +0000
+++ b/sys/netipsec/ipsec6.h Fri Nov 01 04:23:21 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ipsec6.h,v 1.29 2018/05/14 17:34:26 maxv Exp $ */
+/* $NetBSD: ipsec6.h,v 1.30 2019/11/01 04:23:21 knakahara Exp $ */
/* $FreeBSD: ipsec6.h,v 1.1.4.1 2003/01/24 05:11:35 sam Exp $ */
/* $KAME: ipsec.h,v 1.44 2001/03/23 08:08:47 itojun Exp $ */
@@ -59,7 +59,7 @@
struct m_tag;
int ipsec6_common_input(struct mbuf **, int *, int);
int ipsec6_common_input_cb(struct mbuf *, struct secasvar *, int, int);
-int ipsec6_process_packet(struct mbuf *, const struct ipsecrequest *);
+int ipsec6_process_packet(struct mbuf *, const struct ipsecrequest *, int);
#endif /*_KERNEL*/
#endif /* !_NETIPSEC_IPSEC6_H_ */
diff -r 4dfb4cf6bfac -r ce6946c4fb0f sys/netipsec/ipsec_output.c
--- a/sys/netipsec/ipsec_output.c Fri Nov 01 02:58:50 2019 +0000
+++ b/sys/netipsec/ipsec_output.c Fri Nov 01 04:23:21 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ipsec_output.c,v 1.83 2019/09/19 04:08:30 ozaki-r Exp $ */
+/* $NetBSD: ipsec_output.c,v 1.84 2019/11/01 04:23:21 knakahara Exp $ */
/*
* Copyright (c) 2002, 2003 Sam Leffler, Errno Consulting
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ipsec_output.c,v 1.83 2019/09/19 04:08:30 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipsec_output.c,v 1.84 2019/11/01 04:23:21 knakahara Exp $");
#if defined(_KERNEL_OPT)
#include "opt_inet.h"
@@ -105,7 +105,7 @@
}
static int
-ipsec_reinject_ipstack(struct mbuf *m, int af)
+ipsec_reinject_ipstack(struct mbuf *m, int af, int flags)
{
int rv = -1;
struct route *ro;
@@ -127,7 +127,7 @@
* We don't need massage, IPv6 header fields are always in
* net endian.
*/
- rv = ip6_output(m, NULL, ro, 0, NULL, NULL, NULL);
+ rv = ip6_output(m, NULL, ro, flags, NULL, NULL, NULL);
break;
#endif
}
@@ -139,7 +139,7 @@
int
ipsec_process_done(struct mbuf *m, const struct ipsecrequest *isr,
- struct secasvar *sav)
+ struct secasvar *sav, int flags)
{
struct secasindex *saidx;
int error;
@@ -259,7 +259,7 @@
#endif
#ifdef INET6
case AF_INET6:
- return ipsec6_process_packet(m, isr->next);
+ return ipsec6_process_packet(m, isr->next, flags);
#endif
default:
IPSECLOG(LOG_DEBUG, "unknown protocol family %u\n",
@@ -278,7 +278,7 @@
if (ipsec_register_done(m, &error) < 0)
goto bad;
- return ipsec_reinject_ipstack(m, saidx->dst.sa.sa_family);
+ return ipsec_reinject_ipstack(m, saidx->dst.sa.sa_family, flags);
bad:
m_freem(m);
@@ -507,7 +507,7 @@
goto bad;
splx(s);
- return ipsec_reinject_ipstack(m, AF_INET);
+ return ipsec_reinject_ipstack(m, AF_INET, 0);
}
}
KASSERT(sav != NULL);
@@ -628,9 +628,9 @@
i = sizeof(struct ip6_hdr);
off = offsetof(struct ip6_hdr, ip6_nxt);
}
- error = (*sav->tdb_xform->xf_output)(m, isr, sav, i, off);
+ error = (*sav->tdb_xform->xf_output)(m, isr, sav, i, off, 0);
} else {
- error = ipsec_process_done(m, isr, sav);
+ error = ipsec_process_done(m, isr, sav, 0);
}
KEY_SA_UNREF(&sav);
splx(s);
@@ -734,7 +734,7 @@
}
int
-ipsec6_process_packet(struct mbuf *m, const struct ipsecrequest *isr)
+ipsec6_process_packet(struct mbuf *m, const struct ipsecrequest *isr, int flags)
{
struct secasvar *sav = NULL;
struct ip6_hdr *ip6;
@@ -757,7 +757,7 @@
goto bad;
splx(s);
- return ipsec_reinject_ipstack(m, AF_INET6);
+ return ipsec_reinject_ipstack(m, AF_INET6, flags);
}
}
@@ -821,7 +821,7 @@
if (error)
goto unrefsav;
}
- error = (*sav->tdb_xform->xf_output)(m, isr, sav, i, off);
+ error = (*sav->tdb_xform->xf_output)(m, isr, sav, i, off, flags);
KEY_SA_UNREF(&sav);
splx(s);
return error;
diff -r 4dfb4cf6bfac -r ce6946c4fb0f sys/netipsec/xform.h
--- a/sys/netipsec/xform.h Fri Nov 01 02:58:50 2019 +0000
+++ b/sys/netipsec/xform.h Fri Nov 01 04:23:21 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: xform.h,v 1.20 2018/05/30 17:17:11 maxv Exp $ */
+/* $NetBSD: xform.h,v 1.21 2019/11/01 04:23:21 knakahara Exp $ */
/* $FreeBSD: xform.h,v 1.1.4.1 2003/01/24 05:11:36 sam Exp $ */
/* $OpenBSD: ip_ipsp.h,v 1.119 2002/03/14 01:27:11 millert Exp $ */
/*
@@ -58,6 +58,7 @@
u_int8_t tc_nxt; /* next protocol, e.g. IPV4 */
int tc_protoff; /* current protocol offset */
int tc_skip; /* data offset */
+ int tc_flags; /* outer protocol flags, e.g. IPV6_MINMTU */
struct secasvar *tc_sav; /* ipsec SA */
};
@@ -79,7 +80,7 @@
int (*xf_zeroize)(struct secasvar *);
int (*xf_input)(struct mbuf *, struct secasvar *, int, int);
int (*xf_output)(struct mbuf *, const struct ipsecrequest *,
- struct secasvar *, int, int);
+ struct secasvar *, int, int, int);
struct xformsw *xf_next; /* list of registered xforms */
};
diff -r 4dfb4cf6bfac -r ce6946c4fb0f sys/netipsec/xform_ah.c
--- a/sys/netipsec/xform_ah.c Fri Nov 01 02:58:50 2019 +0000
+++ b/sys/netipsec/xform_ah.c Fri Nov 01 04:23:21 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: xform_ah.c,v 1.108 2019/06/12 22:23:50 christos Exp $ */
+/* $NetBSD: xform_ah.c,v 1.109 2019/11/01 04:23:21 knakahara Exp $ */
/* $FreeBSD: xform_ah.c,v 1.1.4.1 2003/01/24 05:11:36 sam Exp $ */
/* $OpenBSD: ip_ah.c,v 1.63 2001/06/26 06:18:58 angelos Exp $ */
/*
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xform_ah.c,v 1.108 2019/06/12 22:23:50 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xform_ah.c,v 1.109 2019/11/01 04:23:21 knakahara Exp $");
#if defined(_KERNEL_OPT)
#include "opt_inet.h"
@@ -891,7 +891,7 @@
*/
static int
ah_output(struct mbuf *m, const struct ipsecrequest *isr, struct secasvar *sav,
- int skip, int protoff)
+ int skip, int protoff, int flags)
{
char buf[IPSEC_ADDRSTRLEN];
const struct auth_hash *ahx;
@@ -1114,6 +1114,7 @@
tc->tc_proto = sav->sah->saidx.proto;
tc->tc_skip = skip;
tc->tc_protoff = protoff;
+ tc->tc_flags = flags;
tc->tc_sav = sav;
return crypto_dispatch(crp);
@@ -1143,7 +1144,7 @@
struct secasvar *sav;
struct mbuf *m;
void *ptr;
- int err;
+ int err, flags;
size_t size;
bool pool_used;
IPSEC_DECLARE_LOCK_VARIABLE;
@@ -1185,6 +1186,7 @@
*/
m_copyback(m, 0, skip, ptr);
+ flags = tc->tc_flags;
/* No longer needed. */
if (__predict_true(pool_used))
pool_cache_put(ah_tdb_crypto_pool_cache, tc);
@@ -1207,7 +1209,7 @@
#endif
/* NB: m is reclaimed by ipsec_process_done. */
- err = ipsec_process_done(m, isr, sav);
+ err = ipsec_process_done(m, isr, sav, flags);
KEY_SA_UNREF(&sav);
KEY_SP_UNREF(&isr->sp);
IPSEC_RELEASE_GLOBAL_LOCKS();
diff -r 4dfb4cf6bfac -r ce6946c4fb0f sys/netipsec/xform_esp.c
--- a/sys/netipsec/xform_esp.c Fri Nov 01 02:58:50 2019 +0000
+++ b/sys/netipsec/xform_esp.c Fri Nov 01 04:23:21 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: xform_esp.c,v 1.98 2019/06/12 22:23:50 christos Exp $ */
+/* $NetBSD: xform_esp.c,v 1.99 2019/11/01 04:23:21 knakahara Exp $ */
/* $FreeBSD: xform_esp.c,v 1.2.2.1 2003/01/24 05:11:36 sam Exp $ */
/* $OpenBSD: ip_esp.c,v 1.69 2001/06/26 06:18:59 angelos Exp $ */
@@ -39,7 +39,7 @@
*/
Home |
Main Index |
Thread Index |
Old Index