Skip to content

Commit

Permalink
Bluetooth: Don't lock sock inside l2cap_get_sock_by_scid()
Browse files Browse the repository at this point in the history
Fix an locking issue with the new l2cap_att_channel(). l2cap_att_channel()
was trying to lock a locked socket.

Reported-by: Anderson Lizardo <anderson.lizardo@openbossa.org>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
  • Loading branch information
Gustavo F. Padovan committed Apr 13, 2011
1 parent 9f72c1d commit 280f294
Showing 1 changed file with 3 additions and 5 deletions.
8 changes: 3 additions & 5 deletions net/bluetooth/l2cap_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -594,7 +594,7 @@ static void l2cap_conn_start(struct l2cap_conn *conn)
*/
static struct sock *l2cap_get_sock_by_scid(int state, __le16 cid, bdaddr_t *src)
{
struct sock *s, *sk = NULL, *sk1 = NULL;
struct sock *sk = NULL, *sk1 = NULL;
struct hlist_node *node;

read_lock(&l2cap_sk_list.lock);
Expand All @@ -613,12 +613,10 @@ static struct sock *l2cap_get_sock_by_scid(int state, __le16 cid, bdaddr_t *src)
sk1 = sk;
}
}
s = node ? sk : sk1;
if (s)
bh_lock_sock(s);

read_unlock(&l2cap_sk_list.lock);

return s;
return node ? sk : sk1;
}

static void l2cap_le_conn_ready(struct l2cap_conn *conn)
Expand Down

0 comments on commit 280f294

Please sign in to comment.