Messages in this thread | | | Subject | Re: [PATCH] fs/file.c: __fget() and dup2() atomicity rules | From | Eric Dumazet <> | Date | Tue, 30 Jun 2015 07:02:04 +0200 |
| |
On Mon, 2015-06-29 at 18:46 +0100, Al Viro wrote: > On Mon, Jun 29, 2015 at 05:10:30PM +0200, Eric Dumazet wrote: > > From: Eric Dumazet <edumazet@google.com> > > > > __fget() makes sure a file refcount is not zero before > > taking a reference. It should also fetch again file pointer > > in order to respect dup2() atomicity requirements. > > > > It should either read a NULL pointer or a file on which > > a refcount can be taken. > > Hmm... The problem is real, but I wonder if one could trigger a long > spin there...
I do not believe we can spin a long time.
By the time do_dup2() calls filp_close(tofree, files), we already have a stable fdt->fd[fd], because of spin_unlock(&files->file_lock) was called before filp_close()
A loop would require threads doing dup2() calls like crazy on same destination fd.
| |