Commit 42776497 authored by Dudu Lu's avatar Dudu Lu Committed by Luiz Augusto von Dentz
Browse files

Bluetooth: l2cap: Add missing chan lock in l2cap_ecred_reconf_rsp



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: 15f02b91 ("Bluetooth: L2CAP: Add initial code for Enhanced Credit Based Mode")
Signed-off-by: default avatarDudu Lu <phx0fer@gmail.com>
Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
parent 1c0bc11c
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -5473,7 +5473,13 @@ static inline int l2cap_ecred_reconf_rsp(struct l2cap_conn *conn,
		if (chan->ident != cmd->ident)
			continue;

		l2cap_chan_hold(chan);
		l2cap_chan_lock(chan);

		l2cap_chan_del(chan, ECONNRESET);

		l2cap_chan_unlock(chan);
		l2cap_chan_put(chan);
	}

	return 0;