Re: [PATCH] Remove extra unlock for the mutex

From: Kuniyuki Iwashima
Date: Tue Oct 10 2023 - 20:29:15 EST


From: Florian Fainelli <f.fainelli@xxxxxxxxx>
Date: Tue, 10 Oct 2023 15:51:13 -0700
> On 10/10/23 15:46, Abhinav Singh wrote:
> > There is a double unlock on mutex. This can cause undefined behaviour.
>
> Where is the double unlock of head->lock (which is a spinlock and not a
> mutex, btw)?

Maybe head is just confused with the preceding head2 as the two are
the same type of struct. They are pointers of different hash tables
though.

bind()ing two sockets to the same 2-tuple will easily trigger hung task.


>
> >
> > Signed-off-by: Abhinav Singh <singhabhinav9051571833@xxxxxxxxx>
> > ---
> > net/ipv4/inet_connection_sock.c | 1 -
> > 1 file changed, 1 deletion(-)
> >
> > diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
> > index aeebe8816689..f11fe8c727a4 100644
> > --- a/net/ipv4/inet_connection_sock.c
> > +++ b/net/ipv4/inet_connection_sock.c
> > @@ -597,7 +597,6 @@ int inet_csk_get_port(struct sock *sk, unsigned short snum)
> > }
> > if (head2_lock_acquired)
> > spin_unlock(&head2->lock);
> > - spin_unlock_bh(&head->lock);
> > return ret;
> > }
> > EXPORT_SYMBOL_GPL(inet_csk_get_port);