Matthias Kaehlcke
c4f5627f7e
Bluetooth: Fix locking in bt_accept_enqueue() for BH context
...
With commit e163376220 ("Bluetooth: Handle bt_accept_enqueue() socket
atomically") lock_sock[_nested]() is used to acquire the socket lock
before manipulating the socket. lock_sock[_nested]() may block, which
is problematic since bt_accept_enqueue() can be called in bottom half
context (e.g. from rfcomm_connect_ind()):
[<ffffff80080d81ec>] __might_sleep+0x4c/0x80
[<ffffff800876c7b0>] lock_sock_nested+0x24/0x58
[<ffffff8000d7c27c>] bt_accept_enqueue+0x48/0xd4 [bluetooth]
[<ffffff8000e67d8c>] rfcomm_connect_ind+0x190/0x218 [rfcomm]
Add a parameter to bt_accept_enqueue() to indicate whether the
function is called from BH context, and acquire the socket lock
with bh_lock_sock_nested() if that's the case.
Also adapt all callers of bt_accept_enqueue() to pass the new
parameter:
- l2cap_sock_new_connection_cb()
- uses lock_sock() to lock the parent socket => process context
- rfcomm_connect_ind()
- acquires the parent socket lock with bh_lock_sock() => BH
context
- __sco_chan_add()
- called from sco_chan_add(), which is called from sco_connect().
parent is NULL, hence bt_accept_enqueue() isn't called in this
code path and we can ignore it
- also called from sco_conn_ready(). uses bh_lock_sock() to acquire
the parent lock => BH context
Fixes: e163376220 ("Bluetooth: Handle bt_accept_enqueue() socket atomically")
Signed-off-by: Matthias Kaehlcke <mka@chromium.org >
Reviewed-by: Douglas Anderson <dianders@chromium.org >
Signed-off-by: Marcel Holtmann <marcel@holtmann.org >
Cc: stable@vger.kernel.org
2019-01-22 09:51:20 +01:00
..
2018-09-08 01:39:47 +09:00
2019-01-22 09:51:20 +01:00
2018-01-19 14:02:12 -05:00
2018-09-26 09:56:07 -07:00
2019-01-11 00:55:37 +01:00
2018-12-20 18:20:26 -08:00
2018-09-18 19:55:01 -07:00
2018-05-16 07:24:30 +02:00
2018-12-09 21:43:31 -08:00
2018-07-20 21:17:12 -07:00
2017-04-12 22:02:36 +02:00
2018-12-10 15:54:34 -08:00
2018-11-02 23:54:56 -07:00
2018-07-13 12:18:18 -04:00
2019-01-15 21:33:36 -08:00
2018-10-31 12:37:12 -07:00
2018-08-07 12:39:13 -07:00
2017-11-02 11:10:55 +01:00
2018-01-15 14:53:43 -05:00
2017-11-02 11:10:55 +01:00
2018-05-16 07:23:35 +02:00
2018-04-19 16:11:11 -04:00
2018-08-04 13:23:15 -07:00
2017-05-27 18:51:41 -04:00
2018-09-26 20:22:19 -07:00
2018-07-30 09:10:25 -07:00
2017-07-04 22:35:16 +01:00
2018-12-18 13:15:04 +01:00
2016-07-08 12:20:57 +02:00
2019-01-03 18:57:57 -08:00
2017-07-04 01:29:04 -07:00
2016-04-19 20:09:25 -04:00
2016-04-25 16:44:27 -04:00
2016-06-25 12:19:35 -04:00
2016-04-25 16:44:27 -04:00
2018-04-02 20:16:17 +02:00
2017-11-02 11:10:55 +01:00
2018-07-27 13:17:50 -07:00
2019-01-18 14:51:22 -08:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-10-18 12:39:36 +01:00
2017-11-30 09:54:25 -05:00
2017-11-04 09:26:51 +09:00
2019-01-17 11:31:24 -08:00
2017-11-02 11:10:55 +01:00
2018-03-05 12:52:45 -05:00
2017-11-04 09:26:51 +09:00
2017-11-02 11:10:55 +01:00
2018-10-17 21:51:13 -07:00
2018-05-20 18:31:42 -04:00
2017-11-02 11:10:55 +01:00
2018-02-28 11:43:28 -05:00
2018-05-28 22:59:54 -04:00
2017-11-01 11:50:43 +09:00
2018-04-23 10:21:24 -04:00
2017-11-02 11:10:55 +01:00
2018-11-30 13:21:52 -08:00
2018-11-30 17:12:39 -08:00
2017-11-02 11:10:55 +01:00
2017-10-30 21:09:24 +09:00
2017-10-11 09:49:34 +02:00
2017-11-02 11:10:55 +01:00
2018-11-17 21:37:29 -08:00
2018-08-29 19:42:52 -07:00
2018-11-07 23:00:23 -08:00
2018-12-10 15:53:04 -08:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-12-11 14:10:06 -05:00
2017-11-02 11:10:55 +01:00
2018-11-08 17:13:08 -08:00
2018-09-05 10:08:25 +02:00
2016-01-04 20:40:41 +01:00
2018-11-02 23:54:56 -07:00
2018-04-22 21:12:00 -04:00
2015-12-15 23:25:20 -05:00
2017-01-18 13:04:28 -05:00
2018-11-07 16:12:38 -08:00
2018-12-15 13:23:02 -08:00
2018-08-14 10:04:36 -07:00
2018-10-17 17:45:07 -07:00
2018-08-11 17:54:18 -07:00
2018-12-24 15:27:56 -08:00
2018-11-07 16:12:38 -08:00
2018-06-05 10:45:24 -04:00
2017-11-02 11:10:55 +01:00
2016-03-13 23:55:13 -04:00
2018-10-19 11:03:06 -07:00
2018-10-16 00:13:12 -07:00
2018-11-08 17:13:08 -08:00
2019-01-15 13:33:44 -08:00
2019-01-01 12:05:02 -08:00
2018-07-18 11:26:40 +02:00
2018-11-07 16:23:05 -08:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-07-18 11:26:53 +02:00
2018-11-07 16:23:05 -08:00
2017-11-02 11:10:55 +01:00
2018-03-27 09:51:23 +02:00
2016-08-17 19:36:23 -04:00
2018-12-03 14:15:26 -08:00
2018-07-11 23:10:19 -07:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-10-25 12:06:25 +09:00
2018-04-22 14:55:03 -04:00
2018-09-13 09:04:58 -07:00
2018-02-14 14:43:32 -05:00
2018-12-18 14:18:49 +01:00
2016-07-08 13:23:12 +02:00
2017-11-02 11:10:55 +01:00
2017-04-01 20:21:44 -07:00
2016-10-03 02:00:22 -04:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-12-19 13:37:34 -08:00
2018-05-28 22:59:54 -04:00
2018-09-14 12:04:33 -07:00
2017-11-02 11:10:55 +01:00
2018-08-01 09:52:30 -07:00
2017-07-01 07:39:09 -07:00
2018-10-12 11:00:22 -07:00
2015-12-08 22:02:33 -05:00
2018-05-16 07:23:35 +02:00
2018-04-07 22:32:31 -04:00
2016-07-08 12:20:57 +02:00
2017-11-08 16:12:33 +09:00
2017-11-02 11:10:55 +01:00
2018-05-24 18:36:15 -07:00
2018-05-16 07:23:35 +02:00
2018-12-14 15:32:19 -08:00
2018-09-25 20:17:35 -07:00
2017-11-02 11:10:55 +01:00
2018-11-08 17:13:08 -08:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-11-07 16:12:39 -08:00
2017-11-02 11:10:55 +01:00
2017-12-05 14:37:13 -05:00
2018-08-28 11:11:47 +02:00
2017-10-20 13:21:36 +01:00
2018-05-16 07:23:35 +02:00
2018-09-26 20:30:55 -07:00
2018-03-13 18:37:02 +02:00
2018-11-06 15:00:45 -08:00
2019-01-19 09:53:18 -08:00
2018-07-21 10:43:12 -05:00
2017-11-02 11:10:55 +01:00
2018-06-22 13:43:27 +09:00
2018-07-31 09:22:48 +02:00
2018-12-20 16:56:04 -08:00
2018-04-11 10:33:46 -04:00
2018-06-30 20:42:25 +09:00
2016-04-28 11:49:45 -04:00
2018-08-11 01:58:46 +02:00
2019-01-01 09:47:59 -08:00
2018-03-01 21:21:36 -05:00
2017-11-02 11:10:55 +01:00
2018-06-06 14:07:53 -04:00
2019-01-17 15:18:47 -08:00
2018-02-21 15:06:05 -05:00
2019-01-18 14:03:53 -08:00
2015-07-09 15:12:20 -07:00
2018-05-08 00:02:41 -04:00
2019-01-17 14:20:40 -08:00
2018-07-07 10:58:49 +09:00
2017-11-02 11:10:55 +01:00
2017-08-29 15:16:52 -07:00
2018-12-03 14:15:26 -08:00
2018-11-08 17:13:08 -08:00
2018-02-16 15:57:42 -05:00
2019-01-17 15:18:47 -08:00
2018-01-24 19:13:45 -05:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-10-05 09:31:01 +02:00
2018-08-29 12:25:53 -07:00
2018-12-20 11:53:36 -08:00