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

Reply via email to