Module Name: src
Committed By: ozaki-r
Date: Wed Aug 2 03:45:57 UTC 2017
Modified Files:
src/sys/netipsec: ipsec.c key.c
Log Message:
Don't use KEY_NEWSP for dummy SP entries
By the change KEY_NEWSP is now not called from softint anymore
and we can use kmem_zalloc with KM_SLEEP for KEY_NEWSP.
To generate a diff of this commit:
cvs rdiff -u -r1.113 -r1.114 src/sys/netipsec/ipsec.c
cvs rdiff -u -r1.199 -r1.200 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/ipsec.c
diff -u src/sys/netipsec/ipsec.c:1.113 src/sys/netipsec/ipsec.c:1.114
--- src/sys/netipsec/ipsec.c:1.113 Wed Aug 2 01:28:03 2017
+++ src/sys/netipsec/ipsec.c Wed Aug 2 03:45:57 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ipsec.c,v 1.113 2017/08/02 01:28:03 ozaki-r Exp $ */
+/* $NetBSD: ipsec.c,v 1.114 2017/08/02 03:45:57 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.113 2017/08/02 01:28:03 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipsec.c,v 1.114 2017/08/02 03:45:57 ozaki-r Exp $");
/*
* IPsec controller part.
@@ -1253,7 +1253,8 @@ ipsec_init_policy(struct socket *so, str
* These SPs are dummy. Never be used because the policy
* is ENTRUST. See ipsec_getpolicybysock.
*/
- if ((new->sp_in = KEY_NEWSP()) == NULL) {
+ new->sp_in = kmem_intr_zalloc(sizeof(struct secpolicy), KM_NOSLEEP);
+ if (new->sp_in == NULL) {
ipsec_delpcbpolicy(new);
return ENOBUFS;
}
@@ -1261,8 +1262,9 @@ ipsec_init_policy(struct socket *so, str
new->sp_in->policy = IPSEC_POLICY_ENTRUST;
new->sp_in->created = 0; /* Indicates dummy */
- if ((new->sp_out = KEY_NEWSP()) == NULL) {
- KEY_SP_UNREF(&new->sp_in);
+ new->sp_out = kmem_intr_zalloc(sizeof(struct secpolicy), KM_NOSLEEP);
+ if (new->sp_out == NULL) {
+ kmem_intr_free(new->sp_in, sizeof(struct secpolicy));
ipsec_delpcbpolicy(new);
return ENOBUFS;
}
@@ -1351,7 +1353,7 @@ ipsec_destroy_policy(struct secpolicy *s
if (sp->created == 0)
/* It's dummy. We can simply free it */
- key_free_sp(sp);
+ kmem_intr_free(sp, sizeof(*sp));
else {
/*
* We cannot destroy here because it can be called in
Index: src/sys/netipsec/key.c
diff -u src/sys/netipsec/key.c:1.199 src/sys/netipsec/key.c:1.200
--- src/sys/netipsec/key.c:1.199 Wed Aug 2 02:12:42 2017
+++ src/sys/netipsec/key.c Wed Aug 2 03:45:57 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: key.c,v 1.199 2017/08/02 02:12:42 ozaki-r Exp $ */
+/* $NetBSD: key.c,v 1.200 2017/08/02 03:45:57 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.199 2017/08/02 02:12:42 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: key.c,v 1.200 2017/08/02 03:45:57 ozaki-r Exp $");
/*
* This code is referd to RFC 2367
@@ -1376,11 +1376,11 @@ key_free_sp(struct secpolicy *sp)
while (isr != NULL) {
nextisr = isr->next;
- kmem_intr_free(isr, sizeof(*isr));
+ kmem_free(isr, sizeof(*isr));
isr = nextisr;
}
- kmem_intr_free(sp, sizeof(*sp));
+ kmem_free(sp, sizeof(*sp));
}
void
@@ -1516,7 +1516,7 @@ key_newsp(const char* where, int tag)
{
struct secpolicy *newsp = NULL;
- newsp = kmem_intr_zalloc(sizeof(struct secpolicy), KM_NOSLEEP);
+ newsp = kmem_zalloc(sizeof(struct secpolicy), KM_SLEEP);
KEYDEBUG_PRINTF(KEYDEBUG_IPSEC_STAMP,
"DP from %s:%u return SP:%p\n", where, tag, newsp);