Commit 02c5ea5
Bluetooth: Fix l2cap_disconnect_req deadlock
L2CAP assumes that the locks conn->chan_lock and chan->lock are
acquired in the order conn->chan_lock, chan->lock to avoid
potential deadlock.
For example, l2sock_shutdown acquires these locks in the order:
mutex_lock(&conn->chan_lock)
l2cap_chan_lock(chan)
However, l2cap_disconnect_req acquires chan->lock in
l2cap_get_chan_by_scid first and then acquires conn->chan_lock
before calling l2cap_chan_del. This means that these locks are
acquired in unexpected order, which leads to potential deadlock:
l2cap_chan_lock(c)
mutex_lock(&conn->chan_lock)
This patch releases chan->lock before acquiring the conn_chan_lock
to avoid the potential deadlock.
Fixes: a2a9339 ("Bluetooth: L2CAP: Fix use-after-free in l2cap_disconnect_{req,rsp}")
Signed-off-by: Ying Hsu <yinghsu@chromium.org>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>1 parent 47c5d82 commit 02c5ea5
1 file changed
+4
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4663 | 4663 | | |
4664 | 4664 | | |
4665 | 4665 | | |
| 4666 | + | |
4666 | 4667 | | |
| 4668 | + | |
4667 | 4669 | | |
4668 | 4670 | | |
4669 | 4671 | | |
| |||
4702 | 4704 | | |
4703 | 4705 | | |
4704 | 4706 | | |
| 4707 | + | |
4705 | 4708 | | |
| 4709 | + | |
4706 | 4710 | | |
4707 | 4711 | | |
4708 | 4712 | | |
| |||
0 commit comments