On 25/01/17(Wed) 15:52, Theo de Raadt wrote:
> I have the same diff.
> 
> It does not help the pr_usrreq path though.

Sure but, let's do baby step. :)

> >On Wed, Jan 25, 2017 at 11:02:22AM -0500, David Hill wrote:
> >> splassert: yield: want 0 have 1
> >> Starting stack trace...
> >> yield() at yield+0xac
> >> pool_get() at pool_get+0x1ca
> >> socreate() at socreate+0xba
> >> sys_socket() at sys_socket+0x135
> >> syscall() at syscall+0x27b
> >> --- syscall (number 97) ---
> >> end of kernel
> >> end trace frame: 0x1b1a16c05800, count: 252
> >> 0x1b197d23277a:
> >> End of stack trace.
> >
> >This one looks easy.  We do not need a lock to setup the still
> >private so structure.
> >
> >ok?
> >
> >bluhm
> >
> >Index: kern/uipc_socket.c
> >===================================================================
> >RCS file: /cvs/src/sys/kern/uipc_socket.c,v
> >retrieving revision 1.173
> >diff -u -p -r1.173 uipc_socket.c
> >--- kern/uipc_socket.c       25 Jan 2017 16:45:50 -0000      1.173
> >+++ kern/uipc_socket.c       25 Jan 2017 18:01:06 -0000
> >@@ -123,7 +123,6 @@ socreate(int dom, struct socket **aso, i
> >             return (EPROTONOSUPPORT);
> >     if (prp->pr_type != type)
> >             return (EPROTOTYPE);
> >-    NET_LOCK(s);
> >     so = pool_get(&socket_pool, PR_WAITOK | PR_ZERO);
> >     TAILQ_INIT(&so->so_q0);
> >     TAILQ_INIT(&so->so_q);
> >@@ -136,6 +135,7 @@ socreate(int dom, struct socket **aso, i
> >     so->so_egid = p->p_ucred->cr_gid;
> >     so->so_cpid = p->p_p->ps_pid;
> >     so->so_proto = prp;
> >+    NET_LOCK(s);
> >     error = (*prp->pr_usrreq)(so, PRU_ATTACH, NULL,
> >         (struct mbuf *)(long)proto, NULL, p);
> >     if (error) {
> >
> >
> 

Reply via email to