On Wed, Apr 25, 2018 at 12:12:29PM +0200, Martin Pieuchot wrote: > The goal is to avoid races between fd_getfile() and FREF(). So we want > a properly refcounted 'struct file *' as soon as possible.
Boot hangs with this patch. The last line on the console is "setting tty flags". Two issues spotted so far: > @@ -201,9 +202,10 @@ fd_getfile_mode(struct filedesc *fdp, in > KASSERT(mode != 0); > > fp = fd_getfile(fdp, fd); > - > - if (fp == NULL || (fp->f_flag & mode) == 0) > + if (fp == NULL || (fp->f_flag & mode) == 0) { > + FRELE(fp, curproc); > return (NULL); > + } > > return (fp); > } * The FRELE() above can dereference a NULL pointer. * sys_close() lacks an FRELE().