Messages in this thread | | | From | Cong Wang <> | Date | Sun, 5 Feb 2017 23:22:12 -0800 | Subject | Re: fs, net: deadlock between bind/splice on af_unix |
| |
On Tue, Jan 31, 2017 at 10:14 AM, Mateusz Guzik <mguzik@redhat.com> wrote: > On Mon, Jan 30, 2017 at 10:44:03PM -0800, Cong Wang wrote: >> Mind being more specific? > > Consider 2 threads which bind the same socket, but with different paths. > > Currently exactly one file will get created, the one used to bind. > > With your patch both threads can succeed creating their respective > files, but only one will manage to bind. The other one must error out, > but it already created a file it is unclear what to do with.
In this case, it simply puts the path back:
err = -EINVAL; if (u->addr) goto out_up; [...]
out_up: mutex_unlock(&u->bindlock); out_put: if (err) path_put(&path); out: return err;
Which is what unix_release_sock() does too:
if (path.dentry) path_put(&path);
| |