Module Name: src Committed By: ozaki-r Date: Mon May 29 10:11:10 UTC 2017
Modified Files: src/sys/netipsec: key.c Log Message: Don't make isr->sav NULL We assume it's always non-NULL. To generate a diff of this commit: cvs rdiff -u -r1.146 -r1.147 src/sys/netipsec/key.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.146 src/sys/netipsec/key.c:1.147 --- src/sys/netipsec/key.c:1.146 Sun May 28 14:16:05 2017 +++ src/sys/netipsec/key.c Mon May 29 10:11:10 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: key.c,v 1.146 2017/05/28 14:16:05 mlelstv Exp $ */ +/* $NetBSD: key.c,v 1.147 2017/05/29 10:11:10 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.146 2017/05/28 14:16:05 mlelstv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: key.c,v 1.147 2017/05/29 10:11:10 ozaki-r Exp $"); /* * This code is referd to RFC 2367 @@ -66,6 +66,7 @@ __KERNEL_RCSID(0, "$NetBSD: key.c,v 1.14 #include <sys/workqueue.h> #include <sys/kmem.h> #include <sys/cpu.h> +#include <sys/atomic.h> #include <net/if.h> #include <net/route.h> @@ -828,6 +829,7 @@ key_checkrequest(struct ipsecrequest *is { u_int level; int error; + struct secasvar *oldsav = NULL; KASSERT(isr != NULL); KASSERT(saidx != NULL); @@ -871,10 +873,8 @@ key_checkrequest(struct ipsecrequest *is * want to check cached SA carefully, rather than picking new SA * every time. */ - if (isr->sav != NULL) { - KEY_FREESAV(&isr->sav); - isr->sav = NULL; - } + if (isr->sav != NULL) + oldsav = isr->sav; #endif /* @@ -882,8 +882,10 @@ key_checkrequest(struct ipsecrequest *is * key_allocsa_policy should allocate the oldest SA available. * See key_do_allocsa_policy(), and draft-jenkins-ipsec-rekeying-03.txt. */ - if (isr->sav == NULL) - isr->sav = key_allocsa_policy(saidx); + isr->sav = key_allocsa_policy(saidx); + membar_producer(); + if (oldsav != NULL) + KEY_FREESAV(&oldsav); /* When there is SA. */ if (isr->sav != NULL) {