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) {