On Tue, 24 Nov 2020 15:24:21 +0300 Denis Kirjanov wrote: > in the case of the socket which is bound to an adress > there is no sense to create a path in the next attempts
> diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c > index 41c3303c3357..fd76a8fe3907 100644 > --- a/net/unix/af_unix.c > +++ b/net/unix/af_unix.c > @@ -1021,7 +1021,7 @@ static int unix_bind(struct socket *sock, struct > sockaddr *uaddr, int addr_len) > > err = -EINVAL; > if (addr_len < offsetofend(struct sockaddr_un, sun_family) || > - sunaddr->sun_family != AF_UNIX) > + sunaddr->sun_family != AF_UNIX || u->addr) > goto out; > > if (addr_len == sizeof(short)) { > @@ -1049,10 +1049,6 @@ static int unix_bind(struct socket *sock, struct > sockaddr *uaddr, int addr_len) > if (err) > goto out_put; > > - err = -EINVAL; > - if (u->addr) > - goto out_up; > - > err = -ENOMEM; > addr = kmalloc(sizeof(*addr)+addr_len, GFP_KERNEL); > if (!addr) Well, after your change the check on u->addr is no longer protected by u->bindlock. Is that okay?