On 21/05/18(Mon) 14:18, Alexander Bluhm wrote: > On Mon, May 21, 2018 at 01:41:45PM +0200, Martin Pieuchot wrote: > > Diff below fixes that, ok? > > This part modifies the struct socket. It would run without > netlock in your diff.
Indeed, updated diff. Index: kern/uipc_syscalls.c =================================================================== RCS file: /cvs/src/sys/kern/uipc_syscalls.c,v retrieving revision 1.170 diff -u -p -r1.170 uipc_syscalls.c --- kern/uipc_syscalls.c 8 May 2018 08:53:41 -0000 1.170 +++ kern/uipc_syscalls.c 21 May 2018 13:09:28 -0000 @@ -340,24 +340,25 @@ doaccept(struct proc *p, int sock, struc error = soaccept(so, nam); if (!error && name != NULL) error = copyaddrout(p, nam, name, namelen, anamelen); +out: if (!error) { if (nflag & FNONBLOCK) so->so_state |= SS_NBIO; else so->so_state &= ~SS_NBIO; + sounlock(s); fp->f_data = so; FILE_SET_MATURE(fp, p); *retval = tmpfd; - } -out: - sounlock(s); - m_freem(nam); - if (error) { + } else { + sounlock(s); fdplock(fdp); fdremove(fdp, tmpfd); closef(fp, p); fdpunlock(fdp); } + + m_freem(nam); FRELE(headfp, p); return (error); }