Skip to content

Commit 5501d05

Browse files
phx0fergregkh
authored andcommitted
Bluetooth: l2cap: Add missing chan lock in l2cap_ecred_reconf_rsp
[ Upstream commit 4277649 ] l2cap_ecred_reconf_rsp() calls l2cap_chan_del() without holding l2cap_chan_lock(). Every other l2cap_chan_del() caller in the file acquires the lock first. A remote BLE device can send a crafted L2CAP ECRED reconfiguration response to corrupt the channel list while another thread is iterating it. Add l2cap_chan_hold() and l2cap_chan_lock() before l2cap_chan_del(), and l2cap_chan_unlock() and l2cap_chan_put() after, matching the pattern used in l2cap_ecred_conn_rsp() and l2cap_conn_del(). Fixes: 15f02b9 ("Bluetooth: L2CAP: Add initial code for Enhanced Credit Based Mode") Signed-off-by: Dudu Lu <phx0fer@gmail.com> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent c27224d commit 5501d05

1 file changed

Lines changed: 6 additions & 0 deletions

File tree

net/bluetooth/l2cap_core.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5473,7 +5473,13 @@ static inline int l2cap_ecred_reconf_rsp(struct l2cap_conn *conn,
54735473
if (chan->ident != cmd->ident)
54745474
continue;
54755475

5476+
l2cap_chan_hold(chan);
5477+
l2cap_chan_lock(chan);
5478+
54765479
l2cap_chan_del(chan, ECONNRESET);
5480+
5481+
l2cap_chan_unlock(chan);
5482+
l2cap_chan_put(chan);
54775483
}
54785484

54795485
return 0;

0 commit comments

Comments
 (0)