On Mon, May 21, 2018 at 03:14:45PM +0200, Martin Pieuchot wrote:
> 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.
OK bluhm@
> 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);
> }