Module Name:    src
Committed By:   ozaki-r
Date:           Thu Aug  3 06:32:51 UTC 2017

Modified Files:
        src/sys/netinet: tcp_input.c tcp_output.c
        src/sys/netipsec: ipsec.c ipsec_input.c ipsec_netbsd.c ipsec_output.c
            key.c key.h xform_ah.c xform_esp.c xform_ipcomp.c

Log Message:
Introduce KEY_SA_UNREF and replace KEY_FREESAV with it where sav will never be 
actually freed in the future

KEY_SA_UNREF is still key_freesav so no functional change for now.

This change reduces diff of further changes.


To generate a diff of this commit:
cvs rdiff -u -r1.359 -r1.360 src/sys/netinet/tcp_input.c
cvs rdiff -u -r1.196 -r1.197 src/sys/netinet/tcp_output.c
cvs rdiff -u -r1.115 -r1.116 src/sys/netipsec/ipsec.c
cvs rdiff -u -r1.50 -r1.51 src/sys/netipsec/ipsec_input.c
cvs rdiff -u -r1.44 -r1.45 src/sys/netipsec/ipsec_netbsd.c
cvs rdiff -u -r1.57 -r1.58 src/sys/netipsec/ipsec_output.c
cvs rdiff -u -r1.205 -r1.206 src/sys/netipsec/key.c
cvs rdiff -u -r1.26 -r1.27 src/sys/netipsec/key.h
cvs rdiff -u -r1.70 -r1.71 src/sys/netipsec/xform_ah.c
cvs rdiff -u -r1.68 -r1.69 src/sys/netipsec/xform_esp.c
cvs rdiff -u -r1.49 -r1.50 src/sys/netipsec/xform_ipcomp.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/netinet/tcp_input.c
diff -u src/sys/netinet/tcp_input.c:1.359 src/sys/netinet/tcp_input.c:1.360
--- src/sys/netinet/tcp_input.c:1.359	Fri Jul  7 01:37:34 2017
+++ src/sys/netinet/tcp_input.c	Thu Aug  3 06:32:51 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: tcp_input.c,v 1.359 2017/07/07 01:37:34 ozaki-r Exp $	*/
+/*	$NetBSD: tcp_input.c,v 1.360 2017/08/03 06:32:51 ozaki-r Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -148,7 +148,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tcp_input.c,v 1.359 2017/07/07 01:37:34 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcp_input.c,v 1.360 2017/08/03 06:32:51 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -3448,12 +3448,12 @@ tcp_dooptions(struct tcpcb *tp, const u_
 			TCP_STATINC(TCP_STAT_GOODSIG);
 
 		key_sa_recordxfer(sav, m);
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 	}
 	return 0;
 out:
 	if (sav != NULL)
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 	return -1;
 #endif
 }
@@ -4714,7 +4714,7 @@ syn_cache_respond(struct syn_cache *sc, 
 	if (sav) {
 		(void)tcp_signature(m, th, hlen, sav, sigp);
 		key_sa_recordxfer(sav, m);
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 	}
 #endif
 

Index: src/sys/netinet/tcp_output.c
diff -u src/sys/netinet/tcp_output.c:1.196 src/sys/netinet/tcp_output.c:1.197
--- src/sys/netinet/tcp_output.c:1.196	Fri Jun  2 03:41:20 2017
+++ src/sys/netinet/tcp_output.c	Thu Aug  3 06:32:51 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: tcp_output.c,v 1.196 2017/06/02 03:41:20 ozaki-r Exp $	*/
+/*	$NetBSD: tcp_output.c,v 1.197 2017/08/03 06:32:51 ozaki-r Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -135,7 +135,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tcp_output.c,v 1.196 2017/06/02 03:41:20 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcp_output.c,v 1.197 2017/08/03 06:32:51 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1505,7 +1505,7 @@ reset:			TCP_REASS_UNLOCK(tp);
 		tcp_signature(m, th, (char *)th - mtod(m, char *), sav, sigp);
 
 		key_sa_recordxfer(sav, m);
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 	}
 #endif
 

Index: src/sys/netipsec/ipsec.c
diff -u src/sys/netipsec/ipsec.c:1.115 src/sys/netipsec/ipsec.c:1.116
--- src/sys/netipsec/ipsec.c:1.115	Wed Aug  2 04:03:28 2017
+++ src/sys/netipsec/ipsec.c	Thu Aug  3 06:32:51 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ipsec.c,v 1.115 2017/08/02 04:03:28 ozaki-r Exp $	*/
+/*	$NetBSD: ipsec.c,v 1.116 2017/08/03 06:32:51 ozaki-r 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.115 2017/08/02 04:03:28 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipsec.c,v 1.116 2017/08/03 06:32:51 ozaki-r Exp $");
 
 /*
  * IPsec controller part.
@@ -815,7 +815,7 @@ ipsec4_forward(struct mbuf *m, int *dest
 			*destmtu -= ipsechdr;
 		}
 		rtcache_unref(rt, ro);
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 	}
 	KEY_SP_UNREF(&sp);
 	return 0;
@@ -1911,7 +1911,7 @@ ipsec_hdrsiz(const struct secpolicy *sp)
 			error = key_checkrequest(isr, &sav);
 			if (error == 0) {
 				clen = esp_hdrsiz(sav);
-				KEY_FREESAV(&sav);
+				KEY_SA_UNREF(&sav);
 			} else
 				clen = esp_hdrsiz(NULL);
 			break;
@@ -1919,7 +1919,7 @@ ipsec_hdrsiz(const struct secpolicy *sp)
 			error = key_checkrequest(isr, &sav);
 			if (error == 0) {
 				clen = ah_hdrsiz(sav);
-				KEY_FREESAV(&sav);
+				KEY_SA_UNREF(&sav);
 			} else
 				clen = ah_hdrsiz(NULL);
 			break;

Index: src/sys/netipsec/ipsec_input.c
diff -u src/sys/netipsec/ipsec_input.c:1.50 src/sys/netipsec/ipsec_input.c:1.51
--- src/sys/netipsec/ipsec_input.c:1.50	Thu Aug  3 04:42:26 2017
+++ src/sys/netipsec/ipsec_input.c	Thu Aug  3 06:32:51 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ipsec_input.c,v 1.50 2017/08/03 04:42:26 ozaki-r Exp $	*/
+/*	$NetBSD: ipsec_input.c,v 1.51 2017/08/03 06:32:51 ozaki-r 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.50 2017/08/03 04:42:26 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipsec_input.c,v 1.51 2017/08/03 06:32:51 ozaki-r Exp $");
 
 /*
  * IPsec input processing.
@@ -288,7 +288,7 @@ ipsec_common_input(struct mbuf *m, int s
 	 * everything else.
 	 */
 	error = (*sav->tdb_xform->xf_input)(m, sav, skip, protoff);
-	KEY_FREESAV(&sav);
+	KEY_SA_UNREF(&sav);
 	splx(s);
 	return error;
 }

Index: src/sys/netipsec/ipsec_netbsd.c
diff -u src/sys/netipsec/ipsec_netbsd.c:1.44 src/sys/netipsec/ipsec_netbsd.c:1.45
--- src/sys/netipsec/ipsec_netbsd.c:1.44	Fri Jul  7 01:37:34 2017
+++ src/sys/netipsec/ipsec_netbsd.c	Thu Aug  3 06:32:51 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ipsec_netbsd.c,v 1.44 2017/07/07 01:37:34 ozaki-r Exp $	*/
+/*	$NetBSD: ipsec_netbsd.c,v 1.45 2017/08/03 06:32:51 ozaki-r Exp $	*/
 /*	$KAME: esp_input.c,v 1.60 2001/09/04 08:43:19 itojun Exp $	*/
 /*	$KAME: ah_input.c,v 1.64 2001/09/04 08:43:19 itojun Exp $	*/
 
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ipsec_netbsd.c,v 1.44 2017/07/07 01:37:34 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipsec_netbsd.c,v 1.45 2017/08/03 06:32:51 ozaki-r Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_inet.h"
@@ -123,7 +123,7 @@ ah4_ctlinput(int cmd, const struct socka
 				    offsetof(struct icmp, icmp_ip));
 				icmp_mtudisc(icp, ip->ip_dst);
 			}
-			KEY_FREESAV(&sav);
+			KEY_SA_UNREF(&sav);
 		}
 	}
 	return NULL;
@@ -168,7 +168,7 @@ esp4_ctlinput(int cmd, const struct sock
 				    offsetof(struct icmp, icmp_ip));
 				icmp_mtudisc(icp, ip->ip_dst);
 			}
-			KEY_FREESAV(&sav);
+			KEY_SA_UNREF(&sav);
 		}
 	}
 	return NULL;
@@ -237,7 +237,7 @@ ah6_ctlinput(int cmd, const struct socka
 			if (sav) {
 				if (SADB_SASTATE_USABLE_P(sav))
 					valid++;
-				KEY_FREESAV(&sav);
+				KEY_SA_UNREF(&sav);
 			}
 
 			/* XXX Further validation? */
@@ -342,7 +342,7 @@ esp6_ctlinput(int cmd, const struct sock
 			if (sav) {
 				if (SADB_SASTATE_USABLE_P(sav))
 					valid++;
-				KEY_FREESAV(&sav);
+				KEY_SA_UNREF(&sav);
 			}
 
 			/* XXX Further validation? */

Index: src/sys/netipsec/ipsec_output.c
diff -u src/sys/netipsec/ipsec_output.c:1.57 src/sys/netipsec/ipsec_output.c:1.58
--- src/sys/netipsec/ipsec_output.c:1.57	Thu Jul 27 06:59:28 2017
+++ src/sys/netipsec/ipsec_output.c	Thu Aug  3 06:32:51 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ipsec_output.c,v 1.57 2017/07/27 06:59:28 ozaki-r Exp $	*/
+/*	$NetBSD: ipsec_output.c,v 1.58 2017/08/03 06:32:51 ozaki-r 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.57 2017/07/27 06:59:28 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipsec_output.c,v 1.58 2017/08/03 06:32:51 ozaki-r Exp $");
 
 /*
  * IPsec output processing.
@@ -428,7 +428,7 @@ again:
 		    " to policy (check your sysctls)\n");
 		IPSEC_OSTAT(PDROPS);
 		*error = EHOSTUNREACH;
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 		goto bad;
 	}
 
@@ -491,7 +491,7 @@ ipsec4_process_packet(struct mbuf *m, st
 		if (ntohs(ip->ip_len) <= sav->esp_frag)
 			goto noneed;
 		*mtu = sav->esp_frag;
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 		splx(s);
 		return 0;
 	}
@@ -605,11 +605,11 @@ noneed:
 	} else {
 		error = ipsec_process_done(m, isr, sav);
 	}
-	KEY_FREESAV(&sav);
+	KEY_SA_UNREF(&sav);
 	splx(s);
 	return error;
 unrefsav:
-	KEY_FREESAV(&sav);
+	KEY_SA_UNREF(&sav);
 bad:
 	splx(s);
 	if (m)
@@ -791,11 +791,11 @@ ipsec6_process_packet(
 		compute_ipsec_pos(m, &i, &off);
 	}
 	error = (*sav->tdb_xform->xf_output)(m, isr, sav, NULL, i, off);
-	KEY_FREESAV(&sav);
+	KEY_SA_UNREF(&sav);
 	splx(s);
 	return error;
 unrefsav:
-	KEY_FREESAV(&sav);
+	KEY_SA_UNREF(&sav);
 bad:
 	splx(s);
 	if (m)

Index: src/sys/netipsec/key.c
diff -u src/sys/netipsec/key.c:1.205 src/sys/netipsec/key.c:1.206
--- src/sys/netipsec/key.c:1.205	Thu Aug  3 06:31:58 2017
+++ src/sys/netipsec/key.c	Thu Aug  3 06:32:51 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: key.c,v 1.205 2017/08/03 06:31:58 ozaki-r Exp $	*/
+/*	$NetBSD: key.c,v 1.206 2017/08/03 06:32:51 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.205 2017/08/03 06:31:58 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: key.c,v 1.206 2017/08/03 06:32:51 ozaki-r Exp $");
 
 /*
  * This code is referd to RFC 2367
@@ -3147,7 +3147,7 @@ key_checkspidup(const struct secasindex 
 			continue;
 		sav = key_getsavbyspi(sah, spi);
 		if (sav != NULL) {
-			KEY_FREESAV(&sav);
+			KEY_SA_UNREF(&sav);
 			return true;
 		}
 	}
@@ -5439,7 +5439,7 @@ key_api_update(struct socket *so, struct
 	return key_sendup_mbuf(so, n, KEY_SENDUP_ALL);
     }
 error:
-	KEY_FREESAV(&sav);
+	KEY_SA_UNREF(&sav);
 	return key_senderror(so, m, error);
 }
 
@@ -5580,7 +5580,7 @@ key_api_add(struct socket *so, struct mb
 	/* We can create new SA only if SPI is differenct. */
 	sav = key_getsavbyspi(sah, sa0->sadb_sa_spi);
 	if (sav != NULL) {
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 		IPSECLOG(LOG_DEBUG, "SA already exists.\n");
 		return key_senderror(so, m, EEXIST);
 	}
@@ -5987,7 +5987,7 @@ key_api_get(struct socket *so, struct mb
 	/* map proto to satype */
 	satype = key_proto2satype(sah->saidx.proto);
 	if (satype == 0) {
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 		IPSECLOG(LOG_DEBUG, "there was invalid proto in SAD.\n");
 		return key_senderror(so, m, EINVAL);
 	}
@@ -5995,7 +5995,7 @@ key_api_get(struct socket *so, struct mb
 	/* create new sadb_msg to reply. */
 	n = key_setdumpsa(sav, SADB_GET, satype, mhp->msg->sadb_msg_seq,
 	    mhp->msg->sadb_msg_pid);
-	KEY_FREESAV(&sav);
+	KEY_SA_UNREF(&sav);
 	if (!n)
 		return key_senderror(so, m, ENOBUFS);
 

Index: src/sys/netipsec/key.h
diff -u src/sys/netipsec/key.h:1.26 src/sys/netipsec/key.h:1.27
--- src/sys/netipsec/key.h:1.26	Wed Aug  2 01:28:03 2017
+++ src/sys/netipsec/key.h	Thu Aug  3 06:32:51 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: key.h,v 1.26 2017/08/02 01:28:03 ozaki-r Exp $	*/
+/*	$NetBSD: key.h,v 1.27 2017/08/03 06:32:51 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 $	*/
 
@@ -83,6 +83,8 @@ void key_socksplist_add(struct secpolicy
 	key_sp_ref(sp, __func__, __LINE__)
 #define KEY_SA_REF(sav)						\
 	key_sa_ref(sav, __func__, __LINE__)
+#define	KEY_SA_UNREF(psav)					\
+	key_freesav(psav, __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_ah.c
diff -u src/sys/netipsec/xform_ah.c:1.70 src/sys/netipsec/xform_ah.c:1.71
--- src/sys/netipsec/xform_ah.c:1.70	Wed Aug  2 01:28:03 2017
+++ src/sys/netipsec/xform_ah.c	Thu Aug  3 06:32:51 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: xform_ah.c,v 1.70 2017/08/02 01:28:03 ozaki-r Exp $	*/
+/*	$NetBSD: xform_ah.c,v 1.71 2017/08/03 06:32:51 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.70 2017/08/02 01:28:03 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xform_ah.c,v 1.71 2017/08/03 06:32:51 ozaki-r Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_inet.h"
@@ -817,7 +817,7 @@ ah_input_cb(struct cryptop *crp)
 
 	sav = tc->tc_sav;
 	if (__predict_false(!SADB_SASTATE_USABLE_P(sav))) {
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 		sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi,
 		    sport, dport);
 		if (sav == NULL) {
@@ -932,12 +932,12 @@ ah_input_cb(struct cryptop *crp)
 
 	IPSEC_COMMON_INPUT_CB(m, sav, skip, protoff);
 
-	KEY_FREESAV(&sav);
+	KEY_SA_UNREF(&sav);
 	IPSEC_RELEASE_GLOBAL_LOCKS();
 	return error;
 bad:
 	if (sav)
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 	IPSEC_RELEASE_GLOBAL_LOCKS();
 	if (m != NULL)
 		m_freem(m);
@@ -1215,7 +1215,7 @@ ah_output_cb(struct cryptop *crp)
 		goto bad;
 	}
 	if (__predict_false(!SADB_SASTATE_USABLE_P(sav))) {
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 		sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi, 0, 0);
 		if (sav == NULL) {
 			AH_STATINC(AH_STAT_NOTDB);
@@ -1269,13 +1269,13 @@ ah_output_cb(struct cryptop *crp)
 
 	/* NB: m is reclaimed by ipsec_process_done. */
 	err = ipsec_process_done(m, isr, sav);
-	KEY_FREESAV(&sav);
+	KEY_SA_UNREF(&sav);
 	KEY_SP_UNREF(&isr->sp);
 	IPSEC_RELEASE_GLOBAL_LOCKS();
 	return err;
 bad:
 	if (sav)
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 	KEY_SP_UNREF(&isr->sp);
 	IPSEC_RELEASE_GLOBAL_LOCKS();
 	if (m)

Index: src/sys/netipsec/xform_esp.c
diff -u src/sys/netipsec/xform_esp.c:1.68 src/sys/netipsec/xform_esp.c:1.69
--- src/sys/netipsec/xform_esp.c:1.68	Wed Aug  2 01:28:03 2017
+++ src/sys/netipsec/xform_esp.c	Thu Aug  3 06:32:51 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: xform_esp.c,v 1.68 2017/08/02 01:28:03 ozaki-r Exp $	*/
+/*	$NetBSD: xform_esp.c,v 1.69 2017/08/03 06:32:51 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.68 2017/08/02 01:28:03 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xform_esp.c,v 1.69 2017/08/03 06:32:51 ozaki-r Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_inet.h"
@@ -521,7 +521,7 @@ esp_input_cb(struct cryptop *crp)
 
 	sav = tc->tc_sav;
 	if (__predict_false(!SADB_SASTATE_USABLE_P(sav))) {
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 		sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi,
 		    sport, dport);
 		if (sav == NULL) {
@@ -549,7 +549,7 @@ esp_input_cb(struct cryptop *crp)
 			sav->tdb_cryptoid = crp->crp_sid;
 
 		if (crp->crp_etype == EAGAIN) {
-			KEY_FREESAV(&sav);
+			KEY_SA_UNREF(&sav);
 			IPSEC_RELEASE_GLOBAL_LOCKS();
 			return crypto_dispatch(crp);
 		}
@@ -673,12 +673,12 @@ esp_input_cb(struct cryptop *crp)
 
 	IPSEC_COMMON_INPUT_CB(m, sav, skip, protoff);
 
-	KEY_FREESAV(&sav);
+	KEY_SA_UNREF(&sav);
 	IPSEC_RELEASE_GLOBAL_LOCKS();
 	return error;
 bad:
 	if (sav)
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 	IPSEC_RELEASE_GLOBAL_LOCKS();
 	if (m != NULL)
 		m_freem(m);
@@ -987,7 +987,7 @@ esp_output_cb(struct cryptop *crp)
 		goto bad;
 	}
 	if (__predict_false(!SADB_SASTATE_USABLE_P(sav))) {
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 		sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi, 0, 0);
 		if (sav == NULL) {
 			char buf[IPSEC_ADDRSTRLEN];
@@ -1046,13 +1046,13 @@ esp_output_cb(struct cryptop *crp)
 
 	/* NB: m is reclaimed by ipsec_process_done. */
 	err = ipsec_process_done(m, isr, sav);
-	KEY_FREESAV(&sav);
+	KEY_SA_UNREF(&sav);
 	KEY_SP_UNREF(&isr->sp);
 	IPSEC_RELEASE_GLOBAL_LOCKS();
 	return err;
 bad:
 	if (sav)
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 	KEY_SP_UNREF(&isr->sp);
 	IPSEC_RELEASE_GLOBAL_LOCKS();
 	if (m)

Index: src/sys/netipsec/xform_ipcomp.c
diff -u src/sys/netipsec/xform_ipcomp.c:1.49 src/sys/netipsec/xform_ipcomp.c:1.50
--- src/sys/netipsec/xform_ipcomp.c:1.49	Wed Aug  2 01:28:03 2017
+++ src/sys/netipsec/xform_ipcomp.c	Thu Aug  3 06:32:51 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: xform_ipcomp.c,v 1.49 2017/08/02 01:28:03 ozaki-r Exp $	*/
+/*	$NetBSD: xform_ipcomp.c,v 1.50 2017/08/03 06:32:51 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.49 2017/08/02 01:28:03 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xform_ipcomp.c,v 1.50 2017/08/03 06:32:51 ozaki-r Exp $");
 
 /* IP payload compression protocol (IPComp), see RFC 2393 */
 #if defined(_KERNEL_OPT)
@@ -259,7 +259,7 @@ ipcomp_input_cb(struct cryptop *crp)
 
 	sav = tc->tc_sav;
 	if (__predict_false(!SADB_SASTATE_USABLE_P(sav))) {
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 		sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi,
 		    sport, dport);
 		if (sav == NULL) {
@@ -282,7 +282,7 @@ ipcomp_input_cb(struct cryptop *crp)
 			sav->tdb_cryptoid = crp->crp_sid;
 
 		if (crp->crp_etype == EAGAIN) {
-			KEY_FREESAV(&sav);
+			KEY_SA_UNREF(&sav);
 			IPSEC_RELEASE_GLOBAL_LOCKS();
 			return crypto_dispatch(crp);
 		}
@@ -348,12 +348,12 @@ ipcomp_input_cb(struct cryptop *crp)
 
 	IPSEC_COMMON_INPUT_CB(m, sav, skip, protoff);
 
-	KEY_FREESAV(&sav);
+	KEY_SA_UNREF(&sav);
 	IPSEC_RELEASE_GLOBAL_LOCKS();
 	return error;
 bad:
 	if (sav)
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 	IPSEC_RELEASE_GLOBAL_LOCKS();
 	if (m)
 		m_freem(m);
@@ -555,7 +555,7 @@ ipcomp_output_cb(struct cryptop *crp)
 		goto bad;
 	}
 	if (__predict_false(!SADB_SASTATE_USABLE_P(sav))) {
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 		sav = KEY_LOOKUP_SA(&tc->tc_dst, tc->tc_proto, tc->tc_spi, 0, 0);
 		if (sav == NULL) {
 			IPCOMP_STATINC(IPCOMP_STAT_NOTDB);
@@ -660,13 +660,13 @@ ipcomp_output_cb(struct cryptop *crp)
 
 	/* NB: m is reclaimed by ipsec_process_done. */
 	error = ipsec_process_done(m, isr, sav);
-	KEY_FREESAV(&sav);
+	KEY_SA_UNREF(&sav);
 	KEY_SP_UNREF(&isr->sp);
 	IPSEC_RELEASE_GLOBAL_LOCKS();
 	return error;
 bad:
 	if (sav)
-		KEY_FREESAV(&sav);
+		KEY_SA_UNREF(&sav);
 	KEY_SP_UNREF(&isr->sp);
 	IPSEC_RELEASE_GLOBAL_LOCKS();
 	if (m)

Reply via email to