Module Name: src Committed By: ozaki-r Date: Fri Jul 14 01:24:24 UTC 2017
Modified Files: src/sys/netipsec: key.c key.h xform.h xform_ah.c xform_esp.c xform_ipcomp.c xform_ipip.c xform_tcp.c Log Message: Pass sav directly to opencrypto callback In a callback, use a passed sav as-is by default and look up a sav only if the passed sav is dead. To generate a diff of this commit: cvs rdiff -u -r1.181 -r1.182 src/sys/netipsec/key.c cvs rdiff -u -r1.21 -r1.22 src/sys/netipsec/key.h cvs rdiff -u -r1.9 -r1.10 src/sys/netipsec/xform.h cvs rdiff -u -r1.59 -r1.60 src/sys/netipsec/xform_ah.c cvs rdiff -u -r1.60 -r1.61 src/sys/netipsec/xform_esp.c cvs rdiff -u -r1.41 -r1.42 src/sys/netipsec/xform_ipcomp.c cvs rdiff -u -r1.51 -r1.52 src/sys/netipsec/xform_ipip.c cvs rdiff -u -r1.13 -r1.14 src/sys/netipsec/xform_tcp.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/key.c diff -u src/sys/netipsec/key.c:1.181 src/sys/netipsec/key.c:1.182 --- src/sys/netipsec/key.c:1.181 Thu Jul 13 01:22:44 2017 +++ src/sys/netipsec/key.c Fri Jul 14 01:24:23 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: key.c,v 1.181 2017/07/13 01:22:44 ozaki-r Exp $ */ +/* $NetBSD: key.c,v 1.182 2017/07/14 01:24:23 ozaki-r Exp $ */ /* $FreeBSD: src/sys/netipsec/key.c,v 1.3.2.3 2004/02/14 22:23:23 bms Exp $ */ /* $KAME: key.c,v 1.191 2001/06/27 10:46:49 sakane Exp $ */ @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: key.c,v 1.181 2017/07/13 01:22:44 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: key.c,v 1.182 2017/07/14 01:24:23 ozaki-r Exp $"); /* * This code is referd to RFC 2367 @@ -1246,6 +1246,17 @@ key_sp_ref(struct secpolicy *sp, const c sp, sp->id, where, tag, sp->refcnt); } +void +key_sa_ref(struct secasvar *sav, const char* where, int tag) +{ + + SA_ADDREF2(sav, where, tag); + + KEYDEBUG_PRINTF(KEYDEBUG_IPSEC_STAMP, + "DP cause refcnt++:%d SA:%p from %s:%u\n", + sav->refcnt, sav, where, tag); +} + /* * Must be called after calling key_lookup_sp*(). * For both the packet without socket and key_freeso(). Index: src/sys/netipsec/key.h diff -u src/sys/netipsec/key.h:1.21 src/sys/netipsec/key.h:1.22 --- src/sys/netipsec/key.h:1.21 Thu Jul 13 01:22:44 2017 +++ src/sys/netipsec/key.h Fri Jul 14 01:24:23 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: key.h,v 1.21 2017/07/13 01:22:44 ozaki-r Exp $ */ +/* $NetBSD: key.h,v 1.22 2017/07/14 01:24:23 ozaki-r Exp $ */ /* $FreeBSD: src/sys/netipsec/key.h,v 1.1.4.1 2003/01/24 05:11:36 sam Exp $ */ /* $KAME: key.h,v 1.21 2001/07/27 03:51:30 itojun Exp $ */ @@ -59,6 +59,7 @@ struct secpolicy *key_gettunnel(const st /* NB: prepend with _ for KAME IPv6 compatbility */ void _key_freesp(struct secpolicy **, const char*, int); void key_sp_ref(struct secpolicy *, const char*, int); +void key_sa_ref(struct secasvar *, const char*, int); /* * Access to the SADB are interlocked with splsoftnet. In particular, @@ -79,6 +80,8 @@ void key_sp_ref(struct secpolicy *, cons _key_freesp(spp, __func__, __LINE__) #define KEY_SP_REF(sp) \ key_sp_ref(sp, __func__, __LINE__) +#define KEY_SA_REF(sav) \ + key_sa_ref(sav, __func__, __LINE__) struct secasvar *key_lookup_sa(const union sockaddr_union *, u_int, u_int32_t, u_int16_t, u_int16_t, const char*, int); Index: src/sys/netipsec/xform.h diff -u src/sys/netipsec/xform.h:1.9 src/sys/netipsec/xform.h:1.10 --- src/sys/netipsec/xform.h:1.9 Wed Jul 5 03:44:59 2017 +++ src/sys/netipsec/xform.h Fri Jul 14 01:24:23 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: xform.h,v 1.9 2017/07/05 03:44:59 ozaki-r Exp $ */ +/* $NetBSD: xform.h,v 1.10 2017/07/14 01:24:23 ozaki-r Exp $ */ /* $FreeBSD: src/sys/netipsec/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 $ */ /* @@ -62,6 +62,7 @@ struct tdb_ident { /* * Opaque data structure hung off a crypto operation descriptor. */ +struct secasvar; struct tdb_crypto { struct ipsecrequest *tc_isr; /* ipsec request state */ u_int32_t tc_spi; /* associated SPI */ @@ -70,9 +71,9 @@ struct tdb_crypto { u_int8_t tc_nxt; /* next protocol, e.g. IPV4 */ int tc_protoff; /* current protocol offset */ int tc_skip; /* data offset */ + struct secasvar *tc_sav; /* ipsec SA */ }; -struct secasvar; struct ipescrequest; struct xformsw { @@ -89,7 +90,7 @@ struct xformsw { const char *xf_name; /* human-readable name */ int (*xf_init)(struct secasvar*, const struct xformsw*);/* setup */ int (*xf_zeroize)(struct secasvar*); /* cleanup */ - int (*xf_input)(struct mbuf*, const struct secasvar*, /* input */ + int (*xf_input)(struct mbuf*, struct secasvar*, /* input */ int, int); int (*xf_output)(struct mbuf*, /* output */ struct ipsecrequest *, struct mbuf **, int, int); Index: src/sys/netipsec/xform_ah.c diff -u src/sys/netipsec/xform_ah.c:1.59 src/sys/netipsec/xform_ah.c:1.60 --- src/sys/netipsec/xform_ah.c:1.59 Thu Jul 13 03:25:38 2017 +++ src/sys/netipsec/xform_ah.c Fri Jul 14 01:24:23 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: xform_ah.c,v 1.59 2017/07/13 03:25:38 ozaki-r Exp $ */ +/* $NetBSD: xform_ah.c,v 1.60 2017/07/14 01:24:23 ozaki-r 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.59 2017/07/13 03:25:38 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xform_ah.c,v 1.60 2017/07/14 01:24:23 ozaki-r Exp $"); #if defined(_KERNEL_OPT) #include "opt_inet.h" @@ -614,7 +614,7 @@ ah_massage_headers(struct mbuf **m0, int * passes authentication. */ static int -ah_input(struct mbuf *m, const struct secasvar *sav, int skip, int protoff) +ah_input(struct mbuf *m, struct secasvar *sav, int skip, int protoff) { const struct auth_hash *ahx; struct tdb_crypto *tc; @@ -748,6 +748,8 @@ ah_input(struct mbuf *m, const struct se tc->tc_nxt = ah->ah_nxt; tc->tc_protoff = protoff; tc->tc_skip = skip; + tc->tc_sav = sav; + KEY_SA_REF(sav); DPRINTF(("%s: hash over %d bytes, skip %d: " "crda len %d skip %d inject %d\n", __func__, @@ -803,12 +805,17 @@ ah_input_cb(struct cryptop *crp) s = splsoftnet(); mutex_enter(softnet_lock); - sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi, sport, dport); - if (sav == NULL) { - AH_STATINC(AH_STAT_NOTDB); - DPRINTF(("%s: SA expired while in crypto\n", __func__)); - error = ENOBUFS; /*XXX*/ - goto bad; + sav = tc->tc_sav; + if (__predict_false(!SADB_SASTATE_USABLE_P(sav))) { + KEY_FREESAV(&sav); + sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi, + sport, dport); + if (sav == NULL) { + AH_STATINC(AH_STAT_NOTDB); + DPRINTF(("%s: SA expired while in crypto\n", __func__)); + error = ENOBUFS; /*XXX*/ + goto bad; + } } saidx = &sav->sah->saidx; @@ -954,7 +961,7 @@ ah_output( ) { char buf[IPSEC_ADDRSTRLEN]; - const struct secasvar *sav; + struct secasvar *sav; const struct auth_hash *ahx; struct cryptodesc *crda; struct tdb_crypto *tc; @@ -1150,6 +1157,8 @@ ah_output( tc->tc_proto = sav->sah->saidx.proto; tc->tc_skip = skip; tc->tc_protoff = protoff; + tc->tc_sav = sav; + KEY_SA_REF(sav); return crypto_dispatch(crp); bad: @@ -1182,12 +1191,16 @@ ah_output_cb(struct cryptop *crp) mutex_enter(softnet_lock); isr = tc->tc_isr; - sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi, 0, 0); - if (sav == NULL) { - AH_STATINC(AH_STAT_NOTDB); - DPRINTF(("%s: SA expired while in crypto\n", __func__)); - error = ENOBUFS; /*XXX*/ - goto bad; + sav = tc->tc_sav; + if (__predict_false(!SADB_SASTATE_USABLE_P(sav))) { + KEY_FREESAV(&sav); + sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi, 0, 0); + if (sav == NULL) { + AH_STATINC(AH_STAT_NOTDB); + DPRINTF(("%s: SA expired while in crypto\n", __func__)); + error = ENOBUFS; /*XXX*/ + goto bad; + } } KASSERTMSG(isr->sav == sav, "SA changed"); Index: src/sys/netipsec/xform_esp.c diff -u src/sys/netipsec/xform_esp.c:1.60 src/sys/netipsec/xform_esp.c:1.61 --- src/sys/netipsec/xform_esp.c:1.60 Thu Jul 13 03:00:46 2017 +++ src/sys/netipsec/xform_esp.c Fri Jul 14 01:24:23 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: xform_esp.c,v 1.60 2017/07/13 03:00:46 ozaki-r Exp $ */ +/* $NetBSD: xform_esp.c,v 1.61 2017/07/14 01:24:23 ozaki-r 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.60 2017/07/13 03:00:46 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xform_esp.c,v 1.61 2017/07/14 01:24:23 ozaki-r Exp $"); #if defined(_KERNEL_OPT) #include "opt_inet.h" @@ -297,7 +297,7 @@ esp_zeroize(struct secasvar *sav) * ESP input processing, called (eventually) through the protocol switch. */ static int -esp_input(struct mbuf *m, const struct secasvar *sav, int skip, int protoff) +esp_input(struct mbuf *m, struct secasvar *sav, int skip, int protoff) { const struct auth_hash *esph; const struct enc_xform *espx; @@ -436,6 +436,8 @@ esp_input(struct mbuf *m, const struct s tc->tc_proto = sav->sah->saidx.proto; tc->tc_protoff = protoff; tc->tc_skip = skip; + tc->tc_sav = sav; + KEY_SA_REF(sav); /* Decryption descriptor */ if (espx) { @@ -510,15 +512,20 @@ esp_input_cb(struct cryptop *crp) s = splsoftnet(); mutex_enter(softnet_lock); - sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi, sport, dport); - if (sav == NULL) { - ESP_STATINC(ESP_STAT_NOTDB); - DPRINTF(("%s: SA expired while in crypto " - "(SA %s/%08lx 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; + sav = tc->tc_sav; + if (__predict_false(!SADB_SASTATE_USABLE_P(sav))) { + KEY_FREESAV(&sav); + sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi, + sport, dport); + if (sav == NULL) { + ESP_STATINC(ESP_STAT_NOTDB); + DPRINTF(("%s: SA expired while in crypto " + "(SA %s/%08lx 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; + } } saidx = &sav->sah->saidx; @@ -702,7 +709,7 @@ esp_output( int hlen, rlen, padding, blks, alen, i, roff; struct mbuf *mo = NULL; struct tdb_crypto *tc; - const struct secasvar *sav; + struct secasvar *sav; struct secasindex *saidx; unsigned char *pad; uint8_t prot; @@ -900,6 +907,8 @@ esp_output( tc->tc_spi = sav->spi; tc->tc_dst = saidx->dst; tc->tc_proto = saidx->proto; + tc->tc_sav = sav; + KEY_SA_REF(sav); /* Crypto operation descriptor. */ crp->crp_ilen = m->m_pkthdr.len; /* Total input length. */ @@ -957,16 +966,20 @@ esp_output_cb(struct cryptop *crp) mutex_enter(softnet_lock); isr = tc->tc_isr; - sav = KEY_LOOKUP_SA(&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, buf, sizeof(buf)), - (u_long) ntohl(tc->tc_spi), tc->tc_proto)); - error = ENOBUFS; /*XXX*/ - goto bad; + sav = tc->tc_sav; + if (__predict_false(!SADB_SASTATE_USABLE_P(sav))) { + KEY_FREESAV(&sav); + sav = KEY_LOOKUP_SA(&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, buf, sizeof(buf)), + (u_long) ntohl(tc->tc_spi), tc->tc_proto)); + error = ENOBUFS; /*XXX*/ + goto bad; + } } KASSERTMSG(isr->sav == sav, "SA changed was %p now %p", isr->sav, sav); Index: src/sys/netipsec/xform_ipcomp.c diff -u src/sys/netipsec/xform_ipcomp.c:1.41 src/sys/netipsec/xform_ipcomp.c:1.42 --- src/sys/netipsec/xform_ipcomp.c:1.41 Fri Jul 7 01:37:34 2017 +++ src/sys/netipsec/xform_ipcomp.c Fri Jul 14 01:24:23 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: xform_ipcomp.c,v 1.41 2017/07/07 01:37:34 ozaki-r Exp $ */ +/* $NetBSD: xform_ipcomp.c,v 1.42 2017/07/14 01:24:23 ozaki-r 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.41 2017/07/07 01:37:34 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xform_ipcomp.c,v 1.42 2017/07/14 01:24:23 ozaki-r Exp $"); /* IP payload compression protocol (IPComp), see RFC 2393 */ #if defined(_KERNEL_OPT) @@ -144,7 +144,7 @@ ipcomp_zeroize(struct secasvar *sav) * ipcomp_input() gets called to uncompress an input packet */ static int -ipcomp_input(struct mbuf *m, const struct secasvar *sav, int skip, int protoff) +ipcomp_input(struct mbuf *m, struct secasvar *sav, int skip, int protoff) { struct tdb_crypto *tc; struct cryptodesc *crdc; @@ -205,6 +205,8 @@ ipcomp_input(struct mbuf *m, const struc tc->tc_proto = sav->sah->saidx.proto; tc->tc_protoff = protoff; tc->tc_skip = skip; + tc->tc_sav = sav; + KEY_SA_REF(sav); return crypto_dispatch(crp); } @@ -252,12 +254,17 @@ ipcomp_input_cb(struct cryptop *crp) s = splsoftnet(); mutex_enter(softnet_lock); - sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi, sport, dport); - if (sav == NULL) { - IPCOMP_STATINC(IPCOMP_STAT_NOTDB); - DPRINTF(("%s: SA expired while in crypto\n", __func__)); - error = ENOBUFS; /*XXX*/ - goto bad; + sav = tc->tc_sav; + if (__predict_false(!SADB_SASTATE_USABLE_P(sav))) { + KEY_FREESAV(&sav); + sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi, + sport, dport); + if (sav == NULL) { + IPCOMP_STATINC(IPCOMP_STAT_NOTDB); + DPRINTF(("%s: SA expired while in crypto\n", __func__)); + error = ENOBUFS; /*XXX*/ + goto bad; + } } saidx = &sav->sah->saidx; @@ -375,7 +382,7 @@ ipcomp_output( ) { char buf[IPSEC_ADDRSTRLEN]; - const struct secasvar *sav; + struct secasvar *sav; const struct comp_algo *ipcompx; int error, ralen, hlen, maxpacketsize; struct cryptodesc *crdc; @@ -485,6 +492,8 @@ ipcomp_output( tc->tc_proto = sav->sah->saidx.proto; tc->tc_skip = skip; tc->tc_protoff = protoff; + tc->tc_sav = sav; + KEY_SA_REF(sav); /* Crypto operation descriptor */ crp->crp_ilen = m->m_pkthdr.len; /* Total input length */ @@ -527,12 +536,16 @@ ipcomp_output_cb(struct cryptop *crp) mutex_enter(softnet_lock); isr = tc->tc_isr; - sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi, 0, 0); - if (sav == NULL) { - IPCOMP_STATINC(IPCOMP_STAT_NOTDB); - DPRINTF(("%s: SA expired while in crypto\n", __func__)); - error = ENOBUFS; /*XXX*/ - goto bad; + sav = tc->tc_sav; + if (__predict_false(!SADB_SASTATE_USABLE_P(sav))) { + KEY_FREESAV(&sav); + sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi, 0, 0); + if (sav == NULL) { + IPCOMP_STATINC(IPCOMP_STAT_NOTDB); + DPRINTF(("%s: SA expired while in crypto\n", __func__)); + error = ENOBUFS; /*XXX*/ + goto bad; + } } KASSERTMSG(isr->sav == sav, "SA changed"); Index: src/sys/netipsec/xform_ipip.c diff -u src/sys/netipsec/xform_ipip.c:1.51 src/sys/netipsec/xform_ipip.c:1.52 --- src/sys/netipsec/xform_ipip.c:1.51 Wed Jul 12 07:00:40 2017 +++ src/sys/netipsec/xform_ipip.c Fri Jul 14 01:24:23 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: xform_ipip.c,v 1.51 2017/07/12 07:00:40 ozaki-r Exp $ */ +/* $NetBSD: xform_ipip.c,v 1.52 2017/07/14 01:24:23 ozaki-r 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.51 2017/07/12 07:00:40 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xform_ipip.c,v 1.52 2017/07/14 01:24:23 ozaki-r Exp $"); /* * IP-inside-IP processing @@ -403,7 +403,7 @@ ipip_output( ) { char buf[IPSEC_ADDRSTRLEN]; - const struct secasvar *sav; + struct secasvar *sav; uint8_t tp, otos; struct secasindex *saidx; int error; @@ -638,7 +638,7 @@ ipe4_zeroize(struct secasvar *sav) static int ipe4_input( struct mbuf *m, - const struct secasvar *sav, + struct secasvar *sav, int skip, int protoff ) Index: src/sys/netipsec/xform_tcp.c diff -u src/sys/netipsec/xform_tcp.c:1.13 src/sys/netipsec/xform_tcp.c:1.14 --- src/sys/netipsec/xform_tcp.c:1.13 Mon Jul 10 07:17:12 2017 +++ src/sys/netipsec/xform_tcp.c Fri Jul 14 01:24:23 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: xform_tcp.c,v 1.13 2017/07/10 07:17:12 ozaki-r Exp $ */ +/* $NetBSD: xform_tcp.c,v 1.14 2017/07/14 01:24:23 ozaki-r Exp $ */ /* $FreeBSD: sys/netipsec/xform_tcp.c,v 1.1.2.1 2004/02/14 22:24:09 bms Exp $ */ /* @@ -31,7 +31,7 @@ /* TCP MD5 Signature Option (RFC2385) */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xform_tcp.c,v 1.13 2017/07/10 07:17:12 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xform_tcp.c,v 1.14 2017/07/14 01:24:23 ozaki-r Exp $"); #if defined(_KERNEL_OPT) #include "opt_inet.h" @@ -141,7 +141,7 @@ tcpsignature_zeroize(struct secasvar *sa * We do this from within tcp itself, so this routine is just a stub. */ static int -tcpsignature_input(struct mbuf *m, const struct secasvar *sav, int skip, +tcpsignature_input(struct mbuf *m, struct secasvar *sav, int skip, int protoff) {