diff options
author | 2012-11-27 17:29:07 +0000 | |
---|---|---|
committer | 2012-11-27 17:29:07 +0000 | |
commit | 7e3caf8176145e698549db08b0ad7d529023dbd6 (patch) | |
tree | 2331e53a3174d80316d8db8074f3e5e8a5f57dd9 | |
parent | Correctly aggregate together errors from nested config files (with (diff) | |
download | wireguard-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.c | 12 | ||||
-rw-r--r-- | sys/net/raw_usrreq.c | 8 |
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); |