Module Name: src
Committed By: ryo
Date: Thu May 11 05:55:14 UTC 2017
Modified Files:
src/sys/netipsec: ipsec.c ipsec.h ipsec_input.c ipsec_output.c
xform_ah.c xform_esp.c xform_ipcomp.c xform_ipip.c
Log Message:
Make ipsec_address() and ipsec_logsastr() mpsafe.
To generate a diff of this commit:
cvs rdiff -u -r1.87 -r1.88 src/sys/netipsec/ipsec.c
cvs rdiff -u -r1.46 -r1.47 src/sys/netipsec/ipsec.h \
src/sys/netipsec/ipsec_output.c
cvs rdiff -u -r1.41 -r1.42 src/sys/netipsec/ipsec_input.c
cvs rdiff -u -r1.53 -r1.54 src/sys/netipsec/xform_ah.c
cvs rdiff -u -r1.54 -r1.55 src/sys/netipsec/xform_esp.c
cvs rdiff -u -r1.37 -r1.38 src/sys/netipsec/xform_ipcomp.c
cvs rdiff -u -r1.48 -r1.49 src/sys/netipsec/xform_ipip.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/netipsec/ipsec.c
diff -u src/sys/netipsec/ipsec.c:1.87 src/sys/netipsec/ipsec.c:1.88
--- src/sys/netipsec/ipsec.c:1.87 Wed May 10 09:34:52 2017
+++ src/sys/netipsec/ipsec.c Thu May 11 05:55:14 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ipsec.c,v 1.87 2017/05/10 09:34:52 ozaki-r Exp $ */
+/* $NetBSD: ipsec.c,v 1.88 2017/05/11 05:55:14 ryo Exp $ */
/* $FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/netipsec/ipsec.c,v 1.2.2.2 2003/07/01 01:38:13 sam Exp $ */
/* $KAME: ipsec.c,v 1.103 2001/05/24 07:14:18 sakane Exp $ */
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ipsec.c,v 1.87 2017/05/10 09:34:52 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipsec.c,v 1.88 2017/05/11 05:55:14 ryo Exp $");
/*
* IPsec controller part.
@@ -2101,6 +2101,7 @@ ipsec_updatereplay(u_int32_t seq, const
int fr;
u_int32_t wsizeb; /* constant: bits of window size */
int frlast; /* constant: last frame */
+ char buf[INET6_ADDRSTRLEN];
IPSEC_SPLASSERT_SOFTNET(__func__);
@@ -2177,7 +2178,7 @@ ok:
return 1;
ipseclog((LOG_WARNING, "replay counter made %d cycle. %s\n",
- replay->overflow, ipsec_logsastr(sav)));
+ replay->overflow, ipsec_logsastr(sav, buf, sizeof(buf))));
}
replay->count++;
@@ -2210,37 +2211,21 @@ vshiftl(unsigned char *bitmap, int nbit,
return;
}
-/* Return a printable string for the IPv4 address. */
-static char *
-inet_ntoa4(struct in_addr ina)
-{
- static char buf[4][4 * sizeof "123" + 4];
- unsigned char *ucp = (unsigned char *) &ina;
- static int i = 3;
-
- i = (i + 1) % 4;
- snprintf(buf[i], sizeof(buf[i]), "%d.%d.%d.%d",
- ucp[0] & 0xff, ucp[1] & 0xff, ucp[2] & 0xff, ucp[3] & 0xff);
- return (buf[i]);
-}
-
/* Return a printable string for the address. */
const char *
-ipsec_address(const union sockaddr_union *sa)
+ipsec_address(const union sockaddr_union *sa, char *buf, size_t size)
{
-#if INET6
- static char ip6buf[INET6_ADDRSTRLEN]; /* XXX: NOMPSAFE */
-#endif
-
switch (sa->sa.sa_family) {
#if INET
case AF_INET:
- return inet_ntoa4(sa->sin.sin_addr);
+ in_print(buf, size, &sa->sin.sin_addr);
+ return buf;
#endif /* INET */
#if INET6
case AF_INET6:
- return IN6_PRINT(ip6buf, &sa->sin6.sin6_addr);
+ in6_print(buf, size, &sa->sin6.sin6_addr);
+ return buf;
#endif /* INET6 */
default:
@@ -2249,27 +2234,19 @@ ipsec_address(const union sockaddr_union
}
const char *
-ipsec_logsastr(const struct secasvar *sav)
+ipsec_logsastr(const struct secasvar *sav, char *buf, size_t size)
{
- static char buf[256];
- char *p;
const struct secasindex *saidx = &sav->sah->saidx;
+ char sbuf[IPSEC_ADDRSTRLEN], dbuf[IPSEC_ADDRSTRLEN];
KASSERTMSG(saidx->src.sa.sa_family == saidx->dst.sa.sa_family,
"af family mismatch, src %u, dst %u",
saidx->src.sa.sa_family, saidx->dst.sa.sa_family);
- p = buf;
- snprintf(buf, sizeof(buf), "SA(SPI=%u ", (u_int32_t)ntohl(sav->spi));
- while (p && *p)
- p++;
- /* NB: only use ipsec_address on one address at a time */
- snprintf(p, sizeof (buf) - (p - buf), "src=%s ",
- ipsec_address(&saidx->src));
- while (p && *p)
- p++;
- snprintf(p, sizeof (buf) - (p - buf), "dst=%s)",
- ipsec_address(&saidx->dst));
+ snprintf(buf, size, "SA(SPI=%u src=%s dst=%s)",
+ (u_int32_t)ntohl(sav->spi),
+ ipsec_address(&saidx->src, sbuf, sizeof(sbuf)),
+ ipsec_address(&saidx->dst, dbuf, sizeof(dbuf)));
return buf;
}
Index: src/sys/netipsec/ipsec.h
diff -u src/sys/netipsec/ipsec.h:1.46 src/sys/netipsec/ipsec.h:1.47
--- src/sys/netipsec/ipsec.h:1.46 Wed May 10 09:34:52 2017
+++ src/sys/netipsec/ipsec.h Thu May 11 05:55:14 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ipsec.h,v 1.46 2017/05/10 09:34:52 ozaki-r Exp $ */
+/* $NetBSD: ipsec.h,v 1.47 2017/05/11 05:55:14 ryo Exp $ */
/* $FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/netipsec/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 $ */
@@ -149,6 +149,11 @@ struct secspacq {
};
#endif /* _KERNEL */
+/* buffer size for formatted output of ipsec address (addr + '%' + scope_id?) */
+#define IPSEC_ADDRSTRLEN (INET6_ADDRSTRLEN + 11)
+/* buffer size for ipsec_logsastr() */
+#define IPSEC_LOGSASTRLEN 192
+
/* according to IANA assignment, port 0x0000 and proto 0xff are reserved. */
#define IPSEC_PORT_ANY 0
#define IPSEC_ULPROTO_ANY 255
@@ -307,8 +312,8 @@ size_t ipsec4_hdrsiz_tcp (struct tcpcb *
#define ipsec4_getpolicybyaddr ipsec_getpolicybyaddr
union sockaddr_union;
-const char *ipsec_address(const union sockaddr_union* sa);
-const char *ipsec_logsastr (const struct secasvar *);
+const char *ipsec_address(const union sockaddr_union* sa, char *, size_t);
+const char *ipsec_logsastr(const struct secasvar *, char *, size_t);
void ipsec_dumpmbuf (struct mbuf *);
Index: src/sys/netipsec/ipsec_output.c
diff -u src/sys/netipsec/ipsec_output.c:1.46 src/sys/netipsec/ipsec_output.c:1.47
--- src/sys/netipsec/ipsec_output.c:1.46 Mon May 8 06:39:23 2017
+++ src/sys/netipsec/ipsec_output.c Thu May 11 05:55:14 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ipsec_output.c,v 1.46 2017/05/08 06:39:23 ozaki-r Exp $ */
+/* $NetBSD: ipsec_output.c,v 1.47 2017/05/11 05:55:14 ryo 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.46 2017/05/08 06:39:23 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipsec_output.c,v 1.47 2017/05/11 05:55:14 ryo Exp $");
/*
* IPsec output processing.
@@ -177,10 +177,11 @@ ipsec_process_done(struct mbuf *m, struc
mo = m_makespace(m, sizeof(struct ip), hlen, &roff);
if (mo == NULL) {
- DPRINTF(("ipsec_process_done : failed to inject"
- "%u byte UDP for SA %s/%08lx\n",
- hlen, ipsec_address(&saidx->dst),
- (u_long) ntohl(sav->spi)));
+ char buf[IPSEC_ADDRSTRLEN];
+ DPRINTF(("ipsec_process_done : failed to inject"
+ "%u byte UDP for SA %s/%08lx\n",
+ hlen, ipsec_address(&saidx->dst, buf, sizeof(buf)),
+ (u_long) ntohl(sav->spi)));
error = ENOBUFS;
goto bad;
}
Index: src/sys/netipsec/ipsec_input.c
diff -u src/sys/netipsec/ipsec_input.c:1.41 src/sys/netipsec/ipsec_input.c:1.42
--- src/sys/netipsec/ipsec_input.c:1.41 Wed Apr 19 03:39:14 2017
+++ src/sys/netipsec/ipsec_input.c Thu May 11 05:55:14 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ipsec_input.c,v 1.41 2017/04/19 03:39:14 ozaki-r Exp $ */
+/* $NetBSD: ipsec_input.c,v 1.42 2017/05/11 05:55:14 ryo Exp $ */
/* $FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/netipsec/ipsec_input.c,v 1.2.4.2 2003/03/28 20:32:53 sam Exp $ */
/* $OpenBSD: ipsec_input.c,v 1.63 2003/02/20 18:35:43 deraadt Exp $ */
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ipsec_input.c,v 1.41 2017/04/19 03:39:14 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipsec_input.c,v 1.42 2017/05/11 05:55:14 ryo Exp $");
/*
* IPsec input processing.
@@ -122,6 +122,7 @@ do { \
static int
ipsec_common_input(struct mbuf *m, int skip, int protoff, int af, int sproto)
{
+ char buf[IPSEC_ADDRSTRLEN];
union sockaddr_union dst_address;
struct secasvar *sav;
u_int32_t spi;
@@ -213,7 +214,7 @@ ipsec_common_input(struct mbuf *m, int s
if (sav == NULL) {
DPRINTF(("ipsec_common_input: no key association found for"
" SA %s/%08lx/%u/%u\n",
- ipsec_address(&dst_address),
+ ipsec_address(&dst_address, buf, sizeof(buf)),
(u_long) ntohl(spi), sproto, ntohs(dport)));
IPSEC_ISTAT(sproto, ESP_STAT_NOTDB, AH_STAT_NOTDB,
IPCOMP_STAT_NOTDB);
@@ -225,7 +226,7 @@ ipsec_common_input(struct mbuf *m, int s
if (sav->tdb_xform == NULL) {
DPRINTF(("ipsec_common_input: attempted to use uninitialized"
" SA %s/%08lx/%u\n",
- ipsec_address(&dst_address),
+ ipsec_address(&dst_address, buf, sizeof(buf)),
(u_long) ntohl(spi), sproto));
IPSEC_ISTAT(sproto, ESP_STAT_NOXFORM, AH_STAT_NOXFORM,
IPCOMP_STAT_NOXFORM);
@@ -305,9 +306,10 @@ ipsec4_common_input_cb(struct mbuf *m, s
/* Fix IPv4 header */
if (m->m_len < skip && (m = m_pullup(m, skip)) == NULL) {
+ char buf[IPSEC_ADDRSTRLEN];
DPRINTF(("ipsec4_common_input_cb: processing failed "
"for SA %s/%08lx\n",
- ipsec_address(&sav->sah->saidx.dst),
+ ipsec_address(&sav->sah->saidx.dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi)));
IPSEC_ISTAT(sproto, ESP_STAT_HDROPS, AH_STAT_HDROPS,
IPCOMP_STAT_HDROPS);
@@ -340,10 +342,11 @@ ipsec4_common_input_cb(struct mbuf *m, s
(saidx->proxy.sa.sa_family != AF_INET &&
saidx->proxy.sa.sa_family != 0)) {
+ char ipbuf[INET_ADDRSTRLEN];
DPRINTF(("ipsec4_common_input_cb: inner "
"source address %s doesn't correspond to "
"expected proxy source %s, SA %s/%08lx\n",
- inet_ntoa4(ipn.ip_src),
+ IN_PRINT(ipbuf, ipn.ip_src),
ipsp_address(saidx->proxy),
ipsp_address(saidx->dst),
(u_long) ntohl(sav->spi)));
@@ -377,12 +380,13 @@ ipsec4_common_input_cb(struct mbuf *m, s
saidx->proxy.sa.sa_family != 0)) {
char ip6buf[INET6_ADDRSTRLEN];
+ char pbuf[IPSEC_ADDRSTRLEN], dbuf[IPSEC_ADDRSTRLEN];
DPRINTF(("ipsec4_common_input_cb: inner "
"source address %s doesn't correspond to "
"expected proxy source %s, SA %s/%08lx\n",
ip6_sprintf(ip6buf, &ip6n.ip6_src),
- ipsec_address(&saidx->proxy),
- ipsec_address(&saidx->dst),
+ ipsec_address(&saidx->proxy, pbuf, sizeof(pbuf)),
+ ipsec_address(&saidx->dst, dbuf, sizeof(dbuf)),
(u_long) ntohl(sav->spi)));
IPSEC_ISTAT(sproto, ESP_STAT_PDROPS,
@@ -537,9 +541,10 @@ ipsec6_common_input_cb(struct mbuf *m, s
if (m->m_len < sizeof(struct ip6_hdr) &&
(m = m_pullup(m, sizeof(struct ip6_hdr))) == NULL) {
+ char buf[IPSEC_ADDRSTRLEN];
DPRINTF(("ipsec6_common_input_cb: processing failed "
- "for SA %s/%08lx\n", ipsec_address(&sav->sah->saidx.dst),
- (u_long) ntohl(sav->spi)));
+ "for SA %s/%08lx\n", ipsec_address(&sav->sah->saidx.dst,
+ buf, sizeof(buf)), (u_long) ntohl(sav->spi)));
IPSEC_ISTAT(sproto, ESP_STAT_HDROPS, AH_STAT_HDROPS,
IPCOMP_STAT_HDROPS);
@@ -572,12 +577,14 @@ ipsec6_common_input_cb(struct mbuf *m, s
(saidx->proxy.sa.sa_family != AF_INET &&
saidx->proxy.sa.sa_family != 0)) {
+ char ipbuf[INET_ADDRSTRLEN];
+ char pbuf[IPSEC_ADDRSTRLEN], dbuf[IPSEC_ADDRSTRLEN];
DPRINTF(("ipsec6_common_input_cb: inner "
"source address %s doesn't correspond to "
"expected proxy source %s, SA %s/%08lx\n",
- inet_ntoa4(ipn.ip_src),
- ipsec_address(&saidx->proxy),
- ipsec_address(&saidx->dst),
+ IN_PRINT(ipbuf, ipn.ip_src),
+ ipsec_address(&saidx->proxy, pbuf, sizeof(pbuf)),
+ ipsec_address(&saidx->dst, dbuf, sizeof(dbuf)),
(u_long) ntohl(sav->spi)));
IPSEC_ISTAT(sproto, ESP_STAT_PDROPS,
@@ -609,12 +616,13 @@ ipsec6_common_input_cb(struct mbuf *m, s
saidx->proxy.sa.sa_family != 0)) {
char ip6buf[INET6_ADDRSTRLEN];
+ char pbuf[IPSEC_ADDRSTRLEN], dbuf[IPSEC_ADDRSTRLEN];
DPRINTF(("ipsec6_common_input_cb: inner "
"source address %s doesn't correspond to "
"expected proxy source %s, SA %s/%08lx\n",
ip6_sprintf(ip6buf, &ip6n.ip6_src),
- ipsec_address(&saidx->proxy),
- ipsec_address(&saidx->dst),
+ ipsec_address(&saidx->proxy, pbuf, sizeof(pbuf)),
+ ipsec_address(&saidx->dst, dbuf, sizeof(dbuf)),
(u_long) ntohl(sav->spi)));
IPSEC_ISTAT(sproto, ESP_STAT_PDROPS,
Index: src/sys/netipsec/xform_ah.c
diff -u src/sys/netipsec/xform_ah.c:1.53 src/sys/netipsec/xform_ah.c:1.54
--- src/sys/netipsec/xform_ah.c:1.53 Wed Apr 19 03:39:14 2017
+++ src/sys/netipsec/xform_ah.c Thu May 11 05:55:14 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: xform_ah.c,v 1.53 2017/04/19 03:39:14 ozaki-r Exp $ */
+/* $NetBSD: xform_ah.c,v 1.54 2017/05/11 05:55:14 ryo Exp $ */
/* $FreeBSD: src/sys/netipsec/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.53 2017/04/19 03:39:14 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xform_ah.c,v 1.54 2017/05/11 05:55:14 ryo Exp $");
#if defined(_KERNEL_OPT)
#include "opt_inet.h"
@@ -643,9 +643,10 @@ ah_input(struct mbuf *m, const struct se
/* Check replay window, if applicable. */
if (sav->replay && !ipsec_chkreplay(ntohl(ah->ah_seq), sav)) {
+ char buf[IPSEC_LOGSASTRLEN];
AH_STATINC(AH_STAT_REPLAY);
DPRINTF(("%s: packet replay failure: %s\n", __func__,
- ipsec_logsastr(sav)));
+ ipsec_logsastr(sav, buf, sizeof(buf))));
m_freem(m);
return ENOBUFS;
}
@@ -655,10 +656,11 @@ ah_input(struct mbuf *m, const struct se
ahx = sav->tdb_authalgxform;
authsize = AUTHSIZE(sav);
if (hl != authsize + rplen - sizeof(struct ah)) {
+ char buf[IPSEC_ADDRSTRLEN];
DPRINTF(("%s: bad authenticator length %u (expecting %lu)"
" for packet in SA %s/%08lx\n", __func__,
hl, (u_long) (authsize + rplen - sizeof(struct ah)),
- ipsec_address(&sav->sah->saidx.dst),
+ ipsec_address(&sav->sah->saidx.dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi)));
AH_STATINC(AH_STAT_BADAUTHL);
m_freem(m);
@@ -793,6 +795,7 @@ ah_input(struct mbuf *m, const struct se
static int
ah_input_cb(struct cryptop *crp)
{
+ char buf[IPSEC_ADDRSTRLEN];
int rplen, error, skip, protoff;
unsigned char calc[AH_ALEN_MAX];
struct mbuf *m;
@@ -889,7 +892,7 @@ ah_input_cb(struct cryptop *crp)
"%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x, " \
"%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\n",
__func__, authsize,
- ipsec_address(&saidx->dst),
+ ipsec_address(&saidx->dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi),
calc[0], calc[1], calc[2], calc[3],
calc[4], calc[5], calc[6], calc[7],
@@ -941,7 +944,8 @@ ah_input_cb(struct cryptop *crp)
error = m_striphdr(m, skip, rplen + authsize);
if (error) {
DPRINTF(("%s: mangled mbuf chain for SA %s/%08lx\n", __func__,
- ipsec_address(&saidx->dst), (u_long) ntohl(sav->spi)));
+ ipsec_address(&saidx->dst, buf, sizeof(buf)),
+ (u_long) ntohl(sav->spi)));
AH_STATINC(AH_STAT_HDROPS);
goto bad;
@@ -979,6 +983,7 @@ ah_output(
int protoff
)
{
+ char buf[IPSEC_ADDRSTRLEN];
const struct secasvar *sav;
const struct auth_hash *ahx;
struct cryptodesc *crda;
@@ -1021,7 +1026,7 @@ ah_output(
DPRINTF(("%s: unknown/unsupported protocol "
"family %u, SA %s/%08lx\n", __func__,
sav->sah->saidx.dst.sa.sa_family,
- ipsec_address(&sav->sah->saidx.dst),
+ ipsec_address(&sav->sah->saidx.dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi)));
AH_STATINC(AH_STAT_NOPF);
error = EPFNOSUPPORT;
@@ -1031,7 +1036,7 @@ ah_output(
if (rplen + authsize + m->m_pkthdr.len > maxpacketsize) {
DPRINTF(("%s: packet in SA %s/%08lx got too big "
"(len %u, max len %u)\n", __func__,
- ipsec_address(&sav->sah->saidx.dst),
+ ipsec_address(&sav->sah->saidx.dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi),
rplen + authsize + m->m_pkthdr.len, maxpacketsize));
AH_STATINC(AH_STAT_TOOBIG);
@@ -1045,7 +1050,7 @@ ah_output(
m = m_clone(m);
if (m == NULL) {
DPRINTF(("%s: cannot clone mbuf chain, SA %s/%08lx\n", __func__,
- ipsec_address(&sav->sah->saidx.dst),
+ ipsec_address(&sav->sah->saidx.dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi)));
AH_STATINC(AH_STAT_HDROPS);
error = ENOBUFS;
@@ -1058,7 +1063,7 @@ ah_output(
DPRINTF(("%s: failed to inject %u byte AH header for SA "
"%s/%08lx\n", __func__,
rplen + authsize,
- ipsec_address(&sav->sah->saidx.dst),
+ ipsec_address(&sav->sah->saidx.dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi)));
AH_STATINC(AH_STAT_HDROPS); /*XXX differs from openbsd */
error = ENOBUFS;
@@ -1085,8 +1090,8 @@ ah_output(
if (sav->replay->count == ~0 &&
(sav->flags & SADB_X_EXT_CYCSEQ) == 0) {
DPRINTF(("%s: replay counter wrapped for SA %s/%08lx\n",
- __func__, ipsec_address(&sav->sah->saidx.dst),
- (u_long) ntohl(sav->spi)));
+ __func__, ipsec_address(&sav->sah->saidx.dst, buf,
+ sizeof(buf)), (u_long) ntohl(sav->spi)));
AH_STATINC(AH_STAT_WRAP);
error = EINVAL;
goto bad;
Index: src/sys/netipsec/xform_esp.c
diff -u src/sys/netipsec/xform_esp.c:1.54 src/sys/netipsec/xform_esp.c:1.55
--- src/sys/netipsec/xform_esp.c:1.54 Wed Apr 19 03:39:14 2017
+++ src/sys/netipsec/xform_esp.c Thu May 11 05:55:14 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: xform_esp.c,v 1.54 2017/04/19 03:39:14 ozaki-r Exp $ */
+/* $NetBSD: xform_esp.c,v 1.55 2017/05/11 05:55:14 ryo Exp $ */
/* $FreeBSD: src/sys/netipsec/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 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xform_esp.c,v 1.54 2017/04/19 03:39:14 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xform_esp.c,v 1.55 2017/05/11 05:55:14 ryo Exp $");
#if defined(_KERNEL_OPT)
#include "opt_inet.h"
@@ -339,9 +339,10 @@ esp_input(struct mbuf *m, const struct s
*/
plen = m->m_pkthdr.len - (skip + hlen + alen);
if ((plen & (espx->blocksize - 1)) || (plen <= 0)) {
+ char buf[IPSEC_ADDRSTRLEN];
DPRINTF(("%s: payload of %d octets not a multiple of %d octets,"
" SA %s/%08lx\n", __func__, plen, espx->blocksize,
- ipsec_address(&sav->sah->saidx.dst),
+ ipsec_address(&sav->sah->saidx.dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi)));
ESP_STATINC(ESP_STAT_BADILEN);
m_freem(m);
@@ -352,8 +353,9 @@ esp_input(struct mbuf *m, const struct s
* Check sequence number.
*/
if (esph && sav->replay && !ipsec_chkreplay(ntohl(esp->esp_seq), sav)) {
- DPRINTF(("%s: packet replay check for %s\n",
- __func__, ipsec_logsastr(sav))); /*XXX*/
+ char logbuf[IPSEC_LOGSASTRLEN];
+ DPRINTF(("%s: packet replay check for %s\n", __func__,
+ ipsec_logsastr(sav, logbuf, sizeof(logbuf)))); /*XXX*/
ESP_STATINC(ESP_STAT_REPLAY);
m_freem(m);
return ENOBUFS; /*XXX*/
@@ -499,6 +501,7 @@ out:
static int
esp_input_cb(struct cryptop *crp)
{
+ char buf[IPSEC_ADDRSTRLEN];
uint8_t lastthree[3], aalg[AH_ALEN_MAX];
int s, hlen, skip, protoff, error;
struct mbuf *m;
@@ -531,7 +534,7 @@ esp_input_cb(struct cryptop *crp)
ESP_STATINC(ESP_STAT_NOTDB);
DPRINTF(("%s: SA expired while in crypto "
"(SA %s/%08lx proto %u)\n", __func__,
- ipsec_address(&tc->tc_dst),
+ ipsec_address(&tc->tc_dst, buf, sizeof(buf)),
(u_long) ntohl(tc->tc_spi), tc->tc_proto));
error = ENOBUFS; /*XXX*/
goto bad;
@@ -591,8 +594,8 @@ esp_input_cb(struct cryptop *crp)
if (!consttime_memequal(ptr, aalg, esph->authsize)) {
DPRINTF(("%s: authentication hash mismatch "
"for packet in SA %s/%08lx\n", __func__,
- ipsec_address(&saidx->dst),
- (u_long) ntohl(sav->spi)));
+ ipsec_address(&saidx->dst, buf,
+ sizeof(buf)), (u_long) ntohl(sav->spi)));
ESP_STATINC(ESP_STAT_BADAUTH);
error = EACCES;
goto bad;
@@ -621,8 +624,9 @@ esp_input_cb(struct cryptop *crp)
m_copydata(m, skip + offsetof(struct newesp, esp_seq),
sizeof(seq), &seq);
if (ipsec_updatereplay(ntohl(seq), sav)) {
+ char logbuf[IPSEC_LOGSASTRLEN];
DPRINTF(("%s: packet replay check for %s\n", __func__,
- ipsec_logsastr(sav)));
+ ipsec_logsastr(sav, logbuf, sizeof(logbuf))));
ESP_STATINC(ESP_STAT_REPLAY);
error = ENOBUFS;
goto bad;
@@ -640,7 +644,7 @@ esp_input_cb(struct cryptop *crp)
if (error) {
ESP_STATINC(ESP_STAT_HDROPS);
DPRINTF(("%s: bad mbuf chain, SA %s/%08lx\n", __func__,
- ipsec_address(&sav->sah->saidx.dst),
+ ipsec_address(&sav->sah->saidx.dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi)));
goto bad;
}
@@ -654,7 +658,7 @@ esp_input_cb(struct cryptop *crp)
DPRINTF(("%s: invalid padding length %d "
"for %u byte packet in SA %s/%08lx\n", __func__,
lastthree[1], m->m_pkthdr.len - skip,
- ipsec_address(&sav->sah->saidx.dst),
+ ipsec_address(&sav->sah->saidx.dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi)));
error = EINVAL;
goto bad;
@@ -666,8 +670,8 @@ esp_input_cb(struct cryptop *crp)
ESP_STATINC(ESP_STAT_BADENC);
DPRINTF(("%s: decryption failed for packet in SA "
"%s/%08lx\n", __func__,
- ipsec_address(&sav->sah->saidx.dst),
- (u_long) ntohl(sav->spi)));
+ ipsec_address(&sav->sah->saidx.dst, buf,
+ sizeof(buf)), (u_long) ntohl(sav->spi)));
DPRINTF(("%s: %x %x\n", __func__, lastthree[0],
lastthree[1]));
error = EINVAL;
@@ -713,6 +717,7 @@ esp_output(
int protoff
)
{
+ char buf[IPSEC_ADDRSTRLEN];
const struct enc_xform *espx;
const struct auth_hash *esph;
int hlen, rlen, padding, blks, alen, i, roff;
@@ -773,14 +778,16 @@ esp_output(
default:
DPRINTF(("%s: unknown/unsupported protocol family %d, "
"SA %s/%08lx\n", __func__, saidx->dst.sa.sa_family,
- ipsec_address(&saidx->dst), (u_long) ntohl(sav->spi)));
+ ipsec_address(&saidx->dst, buf, sizeof(buf)),
+ (u_long)ntohl(sav->spi)));
ESP_STATINC(ESP_STAT_NOPF);
error = EPFNOSUPPORT;
goto bad;
}
if (skip + hlen + rlen + padding + alen > maxpacketsize) {
DPRINTF(("%s: packet in SA %s/%08lx got too big (len %u, "
- "max len %u)\n", __func__, ipsec_address(&saidx->dst),
+ "max len %u)\n", __func__,
+ ipsec_address(&saidx->dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi),
skip + hlen + rlen + padding + alen, maxpacketsize));
ESP_STATINC(ESP_STAT_TOOBIG);
@@ -794,7 +801,8 @@ esp_output(
m = m_clone(m);
if (m == NULL) {
DPRINTF(("%s: cannot clone mbuf chain, SA %s/%08lx\n", __func__,
- ipsec_address(&saidx->dst), (u_long) ntohl(sav->spi)));
+ ipsec_address(&saidx->dst, buf, sizeof(buf)),
+ (u_long) ntohl(sav->spi)));
ESP_STATINC(ESP_STAT_HDROPS);
error = ENOBUFS;
goto bad;
@@ -804,7 +812,8 @@ esp_output(
mo = m_makespace(m, skip, hlen, &roff);
if (mo == NULL) {
DPRINTF(("%s: failed to inject %u byte ESP hdr for SA "
- "%s/%08lx\n", __func__, hlen, ipsec_address(&saidx->dst),
+ "%s/%08lx\n", __func__, hlen,
+ ipsec_address(&saidx->dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi)));
ESP_STATINC(ESP_STAT_HDROPS); /* XXX diffs from openbsd */
error = ENOBUFS;
@@ -834,7 +843,8 @@ esp_output(
pad = m_pad(m, padding + alen);
if (pad == NULL) {
DPRINTF(("%s: m_pad failed for SA %s/%08lx\n", __func__,
- ipsec_address(&saidx->dst), (u_long) ntohl(sav->spi)));
+ ipsec_address(&saidx->dst, buf, sizeof(buf)),
+ (u_long) ntohl(sav->spi)));
m = NULL; /* NB: free'd by m_pad */
error = ENOBUFS;
goto bad;
@@ -970,9 +980,11 @@ esp_output_cb(struct cryptop *crp)
isr = tc->tc_isr;
sav = KEY_ALLOCSA(&tc->tc_dst, tc->tc_proto, tc->tc_spi, 0, 0);
if (sav == NULL) {
+ char buf[IPSEC_ADDRSTRLEN];
ESP_STATINC(ESP_STAT_NOTDB);
DPRINTF(("%s: SA expired while in crypto (SA %s/%08lx "
- "proto %u)\n", __func__, ipsec_address(&tc->tc_dst),
+ "proto %u)\n", __func__,
+ ipsec_address(&tc->tc_dst, buf, sizeof(buf)),
(u_long) ntohl(tc->tc_spi), tc->tc_proto));
error = ENOBUFS; /*XXX*/
goto bad;
Index: src/sys/netipsec/xform_ipcomp.c
diff -u src/sys/netipsec/xform_ipcomp.c:1.37 src/sys/netipsec/xform_ipcomp.c:1.38
--- src/sys/netipsec/xform_ipcomp.c:1.37 Wed Apr 19 03:39:14 2017
+++ src/sys/netipsec/xform_ipcomp.c Thu May 11 05:55:14 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: xform_ipcomp.c,v 1.37 2017/04/19 03:39:14 ozaki-r Exp $ */
+/* $NetBSD: xform_ipcomp.c,v 1.38 2017/05/11 05:55:14 ryo Exp $ */
/* $FreeBSD: src/sys/netipsec/xform_ipcomp.c,v 1.1.4.1 2003/01/24 05:11:36 sam Exp $ */
/* $OpenBSD: ip_ipcomp.c,v 1.1 2001/07/05 12:08:52 jjbg Exp $ */
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xform_ipcomp.c,v 1.37 2017/04/19 03:39:14 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xform_ipcomp.c,v 1.38 2017/05/11 05:55:14 ryo Exp $");
/* IP payload compression protocol (IPComp), see RFC 2393 */
#if defined(_KERNEL_OPT)
@@ -230,6 +230,7 @@ ipcomp_input(struct mbuf *m, const struc
static int
ipcomp_input_cb(struct cryptop *crp)
{
+ char buf[IPSEC_ADDRSTRLEN];
struct tdb_crypto *tc;
int skip, protoff;
struct mbuf *m;
@@ -322,7 +323,7 @@ ipcomp_input_cb(struct cryptop *crp)
case IPPROTO_ESP:
IPCOMP_STATINC(IPCOMP_STAT_HDROPS);
DPRINTF(("%s: nested ipcomp, IPCA %s/%08lx\n", __func__,
- ipsec_address(&sav->sah->saidx.dst),
+ ipsec_address(&sav->sah->saidx.dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi)));
error = EINVAL;
goto bad;
@@ -335,8 +336,8 @@ ipcomp_input_cb(struct cryptop *crp)
if (error) {
IPCOMP_STATINC(IPCOMP_STAT_HDROPS);
DPRINTF(("%s: bad mbuf chain, IPCA %s/%08lx\n", __func__,
- ipsec_address(&sav->sah->saidx.dst),
- (u_long) ntohl(sav->spi)));
+ ipsec_address(&sav->sah->saidx.dst, buf, sizeof(buf)),
+ (u_long) ntohl(sav->spi)));
goto bad;
}
@@ -375,6 +376,7 @@ ipcomp_output(
int protoff
)
{
+ char buf[IPSEC_ADDRSTRLEN];
const struct secasvar *sav;
const struct comp_algo *ipcompx;
int error, ralen, hlen, maxpacketsize;
@@ -417,7 +419,7 @@ ipcomp_output(
DPRINTF(("%s: unknown/unsupported protocol family %d"
", IPCA %s/%08lx\n", __func__,
sav->sah->saidx.dst.sa.sa_family,
- ipsec_address(&sav->sah->saidx.dst),
+ ipsec_address(&sav->sah->saidx.dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi)));
error = EPFNOSUPPORT;
goto bad;
@@ -426,7 +428,7 @@ ipcomp_output(
IPCOMP_STATINC(IPCOMP_STAT_TOOBIG);
DPRINTF(("%s: packet in IPCA %s/%08lx got too big "
"(len %u, max len %u)\n", __func__,
- ipsec_address(&sav->sah->saidx.dst),
+ ipsec_address(&sav->sah->saidx.dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi),
skip + hlen + ralen, maxpacketsize));
error = EMSGSIZE;
@@ -440,7 +442,8 @@ ipcomp_output(
if (m == NULL) {
IPCOMP_STATINC(IPCOMP_STAT_HDROPS);
DPRINTF(("%s: cannot clone mbuf chain, IPCA %s/%08lx\n",
- __func__, ipsec_address(&sav->sah->saidx.dst),
+ __func__,
+ ipsec_address(&sav->sah->saidx.dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi)));
error = ENOBUFS;
goto bad;
@@ -506,6 +509,7 @@ bad:
static int
ipcomp_output_cb(struct cryptop *crp)
{
+ char buf[IPSEC_ADDRSTRLEN];
struct tdb_crypto *tc;
struct ipsecrequest *isr;
struct secasvar *sav;
@@ -567,8 +571,8 @@ ipcomp_output_cb(struct cryptop *crp)
IPCOMP_STATINC(IPCOMP_STAT_WRAP);
DPRINTF(("%s: failed to inject IPCOMP header for "
"IPCA %s/%08lx\n", __func__,
- ipsec_address(&sav->sah->saidx.dst),
- (u_long) ntohl(sav->spi)));
+ ipsec_address(&sav->sah->saidx.dst, buf,
+ sizeof(buf)), (u_long) ntohl(sav->spi)));
error = ENOBUFS;
goto bad;
}
@@ -618,8 +622,8 @@ ipcomp_output_cb(struct cryptop *crp)
DPRINTF(("ipcomp_output: unknown/unsupported protocol "
"family %d, IPCA %s/%08lx\n",
sav->sah->saidx.dst.sa.sa_family,
- ipsec_address(&sav->sah->saidx.dst),
- (u_long) ntohl(sav->spi)));
+ ipsec_address(&sav->sah->saidx.dst, buf,
+ sizeof(buf)), (u_long) ntohl(sav->spi)));
error = EPFNOSUPPORT;
goto bad;
}
Index: src/sys/netipsec/xform_ipip.c
diff -u src/sys/netipsec/xform_ipip.c:1.48 src/sys/netipsec/xform_ipip.c:1.49
--- src/sys/netipsec/xform_ipip.c:1.48 Wed Apr 19 03:39:14 2017
+++ src/sys/netipsec/xform_ipip.c Thu May 11 05:55:14 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: xform_ipip.c,v 1.48 2017/04/19 03:39:14 ozaki-r Exp $ */
+/* $NetBSD: xform_ipip.c,v 1.49 2017/05/11 05:55:14 ryo Exp $ */
/* $FreeBSD: src/sys/netipsec/xform_ipip.c,v 1.3.2.1 2003/01/24 05:11:36 sam Exp $ */
/* $OpenBSD: ip_ipip.c,v 1.25 2002/06/10 18:04:55 itojun Exp $ */
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xform_ipip.c,v 1.48 2017/04/19 03:39:14 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xform_ipip.c,v 1.49 2017/05/11 05:55:14 ryo Exp $");
/*
* IP-inside-IP processing
@@ -402,6 +402,7 @@ ipip_output(
int protoff
)
{
+ char buf[IPSEC_ADDRSTRLEN];
const struct secasvar *sav;
uint8_t tp, otos;
struct secasindex *saidx;
@@ -434,7 +435,7 @@ ipip_output(
saidx->dst.sin.sin_addr.s_addr == INADDR_ANY) {
DPRINTF(("%s: unspecified tunnel endpoint "
"address in SA %s/%08lx\n", __func__,
- ipsec_address(&saidx->dst),
+ ipsec_address(&saidx->dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi)));
IPIP_STATINC(IPIP_STAT_UNSPEC);
error = EINVAL;
@@ -508,7 +509,7 @@ ipip_output(
IN6_IS_ADDR_UNSPECIFIED(&saidx->src.sin6.sin6_addr)) {
DPRINTF(("%s: unspecified tunnel endpoint "
"address in SA %s/%08lx\n", __func__,
- ipsec_address(&saidx->dst),
+ ipsec_address(&saidx->dst, buf, sizeof(buf)),
(u_long) ntohl(sav->spi)));
IPIP_STATINC(IPIP_STAT_UNSPEC);
error = ENOBUFS;