]> git.hungrycats.org Git - linux/commitdiff
[PATCH] NetROM locking
authorRalf Bächle <ralf@linux-mips.org>
Fri, 18 Mar 2005 13:30:08 +0000 (05:30 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 18 Mar 2005 13:30:08 +0000 (05:30 -0800)
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 <ralf@linux-mips.org>
Signed-off-by: Chris Wright <chrisw@osdl.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
net/netrom/nr_in.c

index e272aff648bd58379ac75e6c899e9808d1eaf774..bb240358187679d2b016f96885ee0976491b99a8 100644 (file)
@@ -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;
 }