summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormikeb <mikeb@openbsd.org>2012-11-27 17:29:07 +0000
committermikeb <mikeb@openbsd.org>2012-11-27 17:29:07 +0000
commit7e3caf8176145e698549db08b0ad7d529023dbd6 (patch)
tree2331e53a3174d80316d8db8074f3e5e8a5f57dd9
parentCorrectly aggregate together errors from nested config files (with (diff)
downloadwireguard-openbsd-7e3caf8176145e698549db08b0ad7d529023dbd6.tar.xz
wireguard-openbsd-7e3caf8176145e698549db08b0ad7d529023dbd6.zip
remove incorrect splnet usage in pfkey interface
and make raw_usrreq do an splsoftnet on its own; joint work with david hill, ok claudio
-rw-r--r--sys/net/pfkey.c12
-rw-r--r--sys/net/raw_usrreq.c8
2 files changed, 8 insertions, 12 deletions
diff --git a/sys/net/pfkey.c b/sys/net/pfkey.c
index 361d819934a..98fb149b2c5 100644
--- a/sys/net/pfkey.c
+++ b/sys/net/pfkey.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pfkey.c,v 1.19 2012/09/20 10:25:03 blambert Exp $ */
+/* $OpenBSD: pfkey.c,v 1.20 2012/11/27 17:29:07 mikeb Exp $ */
/*
* @(#)COPYRIGHT 1.1 (NRL) 17 January 1995
@@ -198,15 +198,12 @@ static int
pfkey_attach(struct socket *socket, struct mbuf *proto, struct proc *p)
{
int rval;
- int s;
if (!(socket->so_pcb = malloc(sizeof(struct rawcb),
M_PCB, M_DONTWAIT | M_ZERO)))
return (ENOMEM);
- s = splnet();
rval = raw_usrreq(socket, PRU_ATTACH, NULL, proto, NULL, p);
- splx(s);
if (rval)
goto ret;
@@ -228,12 +225,10 @@ ret:
static int
pfkey_detach(struct socket *socket, struct proc *p)
{
- int rval, i, s;
+ int rval, i;
rval = pfkey_versions[socket->so_proto->pr_protocol]->release(socket);
- s = splnet();
i = raw_usrreq(socket, PRU_DETACH, NULL, NULL, NULL, p);
- splx(s);
if (!rval)
rval = i;
@@ -246,7 +241,6 @@ pfkey_usrreq(struct socket *socket, int req, struct mbuf *mbuf,
struct mbuf *nam, struct mbuf *control, struct proc *p)
{
int rval;
- int s;
if ((socket->so_proto->pr_protocol > PFKEY_PROTOCOL_MAX) ||
(socket->so_proto->pr_protocol < 0) ||
@@ -261,9 +255,7 @@ pfkey_usrreq(struct socket *socket, int req, struct mbuf *mbuf,
return (pfkey_detach(socket, p));
default:
- s = splnet();
rval = raw_usrreq(socket, req, mbuf, nam, control, p);
- splx(s);
}
return (rval);
diff --git a/sys/net/raw_usrreq.c b/sys/net/raw_usrreq.c
index a0cfa8b6769..0b65d2e7602 100644
--- a/sys/net/raw_usrreq.c
+++ b/sys/net/raw_usrreq.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: raw_usrreq.c,v 1.14 2012/01/11 23:47:06 bluhm Exp $ */
+/* $OpenBSD: raw_usrreq.c,v 1.15 2012/11/27 17:29:07 mikeb Exp $ */
/* $NetBSD: raw_usrreq.c,v 1.11 1996/02/13 22:00:43 christos Exp $ */
/*
@@ -151,7 +151,7 @@ raw_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
{
struct rawcb *rp = sotorawcb(so);
int error = 0;
- int len;
+ int len, s;
if (req == PRU_CONTROL)
return (EOPNOTSUPP);
@@ -163,6 +163,7 @@ raw_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
error = EINVAL;
goto release;
}
+ s = splsoftnet();
switch (req) {
/*
@@ -269,6 +270,7 @@ raw_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
/*
* stat: don't bother with a blocksize.
*/
+ splx(s);
return (0);
/*
@@ -276,6 +278,7 @@ raw_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
*/
case PRU_RCVOOB:
case PRU_RCVD:
+ splx(s);
return (EOPNOTSUPP);
case PRU_LISTEN:
@@ -308,6 +311,7 @@ raw_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
panic("raw_usrreq");
}
release:
+ splx(s);
if (m != NULL)
m_freem(m);
return (error);