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().