From: ralf@linux-mips.org Date: Sat, 19 Mar 2005 05:30:08 +0000 (-0800) Subject: [PATCH] NetROM locking X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b93fb6d60d1986b16692c0be30edbc3b5d0e6449;p=thirdparty%2Fkernel%2Fstable.git [PATCH] NetROM locking Fix deadlock in NetROM due to double locking. I was sent the patch by Alan and have doublechecked it. This bug hits Net/ROM users really hard. It's accepted by DaveM - but just too late to make it into 2.6.11. Signed-off-by: Ralf Baechle Signed-off-by: Chris Wright Signed-off-by: Greg Kroah-Hartman --- diff --git a/net/netrom/nr_in.c b/net/netrom/nr_in.c index e272aff648bd5..bb24035818767 100644 --- a/net/netrom/nr_in.c +++ b/net/netrom/nr_in.c @@ -74,7 +74,6 @@ static int nr_queue_rx_frame(struct sock *sk, struct sk_buff *skb, int more) static int nr_state1_machine(struct sock *sk, struct sk_buff *skb, int frametype) { - bh_lock_sock(sk); switch (frametype) { case NR_CONNACK: { nr_cb *nr = nr_sk(sk); @@ -103,8 +102,6 @@ static int nr_state1_machine(struct sock *sk, struct sk_buff *skb, default: break; } - bh_unlock_sock(sk); - return 0; } @@ -116,7 +113,6 @@ static int nr_state1_machine(struct sock *sk, struct sk_buff *skb, static int nr_state2_machine(struct sock *sk, struct sk_buff *skb, int frametype) { - bh_lock_sock(sk); switch (frametype) { case NR_CONNACK | NR_CHOKE_FLAG: nr_disconnect(sk, ECONNRESET); @@ -132,8 +128,6 @@ static int nr_state2_machine(struct sock *sk, struct sk_buff *skb, default: break; } - bh_unlock_sock(sk); - return 0; } @@ -154,7 +148,6 @@ static int nr_state3_machine(struct sock *sk, struct sk_buff *skb, int frametype nr = skb->data[18]; ns = skb->data[17]; - bh_lock_sock(sk); switch (frametype) { case NR_CONNREQ: nr_write_internal(sk, NR_CONNACK); @@ -265,8 +258,6 @@ static int nr_state3_machine(struct sock *sk, struct sk_buff *skb, int frametype default: break; } - bh_unlock_sock(sk); - return queued; }