diff options
author | Nagarjuna Kristam <nkristam@nvidia.com> | 2012-07-25 17:42:19 +0530 |
---|---|---|
committer | Varun Colbert <vcolbert@nvidia.com> | 2012-08-03 18:08:03 -0700 |
commit | 48314e4904ddb927c32eb88a2c89a200cf610de2 (patch) | |
tree | 6edca4ba180518d8000c4aaa3dfb1274b8516d2f /net | |
parent | 50d9301e8e1b0fcad03906110374bb802d0cc3a3 (diff) |
Bluetooth: prevent multiple l2cap_sock_kill function calls
Remove SOCK_DEAD check inside l2cap_sock_kill, as this prevents cleanup of
l2cap sockets when bluetooth is turned off from UI
Instead of SOCK_DEAD check inside l2cap_sock_kill, add SOCK_DEAD check
inside l2cap_sock_close_cb to prevent multiple l2cap_sock_kill function calls.
This check avoids kernel panic, when l2cap_sock_close_cb function is called with
same socket multiple times.
Bug 1018499
Change-Id: I77388ffb1407138646feb9fbea467ca12e4a0855
Signed-off-by: Nagarjuna Kristam <nkristam@nvidia.com>
Reviewed-on: http://git-master/r/118321
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Rakesh Kumar <krakesh@nvidia.com>
Reviewed-by: Sachin Nikam <snikam@nvidia.com>
Reviewed-by: Varun Wadekar <vwadekar@nvidia.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/bluetooth/l2cap_sock.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c index eaee69dabe64..7ce5ab54ba5b 100644 --- a/net/bluetooth/l2cap_sock.c +++ b/net/bluetooth/l2cap_sock.c @@ -787,8 +787,7 @@ done: */ static void l2cap_sock_kill(struct sock *sk) { - if (!sock_flag(sk, SOCK_ZAPPED) || sock_flag(sk, SOCK_DEAD) || - sk->sk_socket) + if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket) return; BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state)); @@ -921,7 +920,8 @@ static void l2cap_sock_close_cb(void *data) { struct sock *sk = data; - l2cap_sock_kill(sk); + if (!sock_flag(sk, SOCK_DEAD)) + l2cap_sock_kill(sk); } static void l2cap_sock_state_change_cb(void *data, int state) |