As you might have already noticed, the diff was committed.
Thanks!

On Mon, Nov 26, 2012 at 8:34 PM, David Hill <dh...@mindcry.org> wrote:
> Any thoughts?
>
> On Tue, Nov 13, 2012 at 02:18:35PM -0500, David Hill wrote:
>>Hello -
>>
>>I originally asked mikeb if splnet was needed in net/pfkey.c.  He added
>>onto my diff (which I have included below).  I noticed route_usrreq from
>>net/rtsock.c calls raw_usrreq protected by splsoftnet.
>>
>>I thought I'd send it to tech@ to possibly get more feedback.
>>
>>Here is the diff I am running with.  I haven't had any regressions.
>>
>>Index: sys/net/pfkey.c
>>===================================================================
>>RCS file: /cvs/src/sys/net/pfkey.c,v
>>retrieving revision 1.19
>>diff -N -u -p sys/net/pfkey.c
>>--- sys/net/pfkey.c    20 Sep 2012 10:25:03 -0000      1.19
>>+++ sys/net/pfkey.c    11 Nov 2012 01:18:42 -0000
>>@@ -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 mb
>>     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 mb
>>               return (pfkey_detach(socket, p));
>>
>>       default:
>>-              s = splnet();
>>               rval = raw_usrreq(socket, req, mbuf, nam, control, p);
>>-              splx(s);
>>       }
>>
>>       return (rval);
>>Index: sys/net/raw_usrreq.c
>>===================================================================
>>RCS file: /cvs/src/sys/net/raw_usrreq.c,v
>>retrieving revision 1.14
>>diff -N -u -p sys/net/raw_usrreq.c
>>--- sys/net/raw_usrreq.c       11 Jan 2012 23:47:06 -0000      1.14
>>+++ sys/net/raw_usrreq.c       11 Nov 2012 01:18:42 -0000
>>@@ -151,7 +151,7 @@ raw_usrreq(struct socket *so, int req, struct mbuf *m,
>> {
>>       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,
>>               error = EINVAL;
>>               goto release;
>>       }
>>+      s = splsoftnet();
>>       switch (req) {
>>
>>       /*
>>@@ -269,6 +270,7 @@ raw_usrreq(struct socket *so, int req, struct mbuf *m,
>>               /*
>>                * 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,
>>        */
>>       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,
>>               panic("raw_usrreq");
>>       }
>> release:
>>+      splx(s);
>>       if (m != NULL)
>>               m_freem(m);
>>       return (error);

Reply via email to