Module Name:    src
Committed By:   ozaki-r
Date:           Fri Jul 21 04:43:42 UTC 2017

Modified Files:
        src/sys/netipsec: key.c
        src/tests/net/ipsec: t_ipsec_misc.sh

Log Message:
Stop setting isr->sav on looking up sav in key_checkrequest


To generate a diff of this commit:
cvs rdiff -u -r1.189 -r1.190 src/sys/netipsec/key.c
cvs rdiff -u -r1.14 -r1.15 src/tests/net/ipsec/t_ipsec_misc.sh

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.189 src/sys/netipsec/key.c:1.190
--- src/sys/netipsec/key.c:1.189	Fri Jul 21 04:39:08 2017
+++ src/sys/netipsec/key.c	Fri Jul 21 04:43:42 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: key.c,v 1.189 2017/07/21 04:39:08 ozaki-r Exp $	*/
+/*	$NetBSD: key.c,v 1.190 2017/07/21 04:43:42 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.189 2017/07/21 04:39:08 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: key.c,v 1.190 2017/07/21 04:43:42 ozaki-r Exp $");
 
 /*
  * This code is referd to RFC 2367
@@ -777,8 +777,8 @@ key_checkrequest(struct ipsecrequest *is
 {
 	u_int level;
 	int error;
-	struct secasvar *oldsav = NULL;
 	const struct secasindex *saidx = &isr->saidx;
+	struct secasvar *sav;
 
 	KASSERT(isr != NULL);
 	KASSERTMSG(saidx->mode == IPSEC_MODE_TRANSPORT ||
@@ -795,43 +795,10 @@ key_checkrequest(struct ipsecrequest *is
 	 * handle bundled SA's in the callback thread.
 	 */
 	IPSEC_SPLASSERT_SOFTNET("key_checkrequest");
-#if 0
-	/*
-	 * We do allocate new SA only if the state of SA in the holder is
-	 * SADB_SASTATE_DEAD.  The SA for outbound must be the oldest.
-	 */
-	if (isr->sav != NULL) {
-		if (isr->sav == (struct secasvar *)LIST_FIRST(
-			    &isr->sav->sah->savtree[SADB_SASTATE_DEAD])) {
-			KEY_FREESAV(&isr->sav);
-			isr->sav = NULL;
-		}
-	}
-#else
-	/*
-	 * we free any SA stashed in the IPsec request because a different
-	 * SA may be involved each time this request is checked, either
-	 * because new SAs are being configured, or this request is
-	 * associated with an unconnected datagram socket, or this request
-	 * is associated with a system default policy.
-	 *
-	 * The operation may have negative impact to performance.  We may
-	 * want to check cached SA carefully, rather than picking new SA
-	 * every time.
-	 */
-	if (isr->sav != NULL)
-		oldsav = isr->sav;
-#endif
 
-	isr->sav = key_lookup_sa_bysaidx(saidx);
-	membar_producer();
-	if (oldsav != NULL)
-		KEY_FREESAV(&oldsav);
-
-	/* When there is SA. */
-	if (isr->sav != NULL) {
-		*ret = isr->sav;
-		SA_ADDREF(*ret);
+	sav = key_lookup_sa_bysaidx(saidx);
+	if (sav != NULL) {
+		*ret = sav;
 		return 0;
 	}
 
@@ -846,7 +813,6 @@ key_checkrequest(struct ipsecrequest *is
 
 	if (level != IPSEC_LEVEL_REQUIRE) {
 		/* XXX sigh, the interface to this routine is botched */
-		KASSERTMSG(isr->sav == NULL, "unexpected SA");
 		*ret = NULL;
 		return 0;
 	} else {

Index: src/tests/net/ipsec/t_ipsec_misc.sh
diff -u src/tests/net/ipsec/t_ipsec_misc.sh:1.14 src/tests/net/ipsec/t_ipsec_misc.sh:1.15
--- src/tests/net/ipsec/t_ipsec_misc.sh:1.14	Thu Jul 20 01:10:57 2017
+++ src/tests/net/ipsec/t_ipsec_misc.sh	Fri Jul 21 04:43:42 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: t_ipsec_misc.sh,v 1.14 2017/07/20 01:10:57 ozaki-r Exp $
+#	$NetBSD: t_ipsec_misc.sh,v 1.15 2017/07/21 04:43:42 ozaki-r Exp $
 #
 # Copyright (c) 2017 Internet Initiative Japan Inc.
 # All rights reserved.
@@ -152,21 +152,11 @@ test_ipsec4_lifetime()
 
 	export RUMP_SERVER=$SOCK_LOCAL
 	$DEBUG && $HIJACKING setkey -D
-	atf_check -s exit:0 -o empty $HIJACKING setkey -D
-	# The SA on output remain because sp/isr still refers it
-	atf_check -s exit:0 -o match:"$ip_local $ip_peer" \
-	    $HIJACKING setkey -D -a
-	atf_check -s exit:0 -o not-match:"$ip_peer $ip_local" \
-	    $HIJACKING setkey -D -a
+	atf_check -s exit:0 -o match:'No SAD entries.' $HIJACKING setkey -D -a
 
 	export RUMP_SERVER=$SOCK_PEER
 	$DEBUG && $HIJACKING setkey -D
-	atf_check -s exit:0 -o empty $HIJACKING setkey -D
-	atf_check -s exit:0 -o not-match:"$ip_local $ip_peer" \
-	    $HIJACKING setkey -D -a
-	# The SA on output remain because sp/isr still refers it
-	atf_check -s exit:0 -o match:"$ip_peer $ip_local" \
-	    $HIJACKING setkey -D -a
+	atf_check -s exit:0 -o match:'No SAD entries.' $HIJACKING setkey -D -a
 
 	export RUMP_SERVER=$SOCK_LOCAL
 	atf_check -s not-exit:0 -o match:'0 packets received' \
@@ -248,21 +238,11 @@ test_ipsec6_lifetime()
 
 	export RUMP_SERVER=$SOCK_LOCAL
 	$DEBUG && $HIJACKING setkey -D
-	atf_check -s exit:0 -o empty $HIJACKING setkey -D
-	# The SA on output remain because sp/isr still refers it
-	atf_check -s exit:0 -o match:"$ip_local $ip_peer" \
-	    $HIJACKING setkey -D -a
-	atf_check -s exit:0 -o not-match:"$ip_peer $ip_local" \
-	    $HIJACKING setkey -D -a
+	atf_check -s exit:0 -o match:'No SAD entries.' $HIJACKING setkey -D -a
 
 	export RUMP_SERVER=$SOCK_PEER
 	$DEBUG && $HIJACKING setkey -D
-	atf_check -s exit:0 -o empty $HIJACKING setkey -D
-	atf_check -s exit:0 -o not-match:"$ip_local $ip_peer" \
-	    $HIJACKING setkey -D -a
-	# The SA on output remain because sp/isr still refers it
-	atf_check -s exit:0 -o match:"$ip_peer $ip_local" \
-	    $HIJACKING setkey -D -a
+	atf_check -s exit:0 -o match:'No SAD entries.' $HIJACKING setkey -D -a
 
 	export RUMP_SERVER=$SOCK_LOCAL
 	atf_check -s not-exit:0 -o match:'0 packets received' \

Reply via email to