mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
Bluetooth: L2CAP: Reject mode changes on connected channels
A peer can send a configuration response with an RFC
option for another mode to a connected channel, for
example to switch it from Streaming to ERTM mode.
l2cap_parse_conf_rsp() then changes chan->mode, but
l2cap_ertm_init() is not called again, so the ERTM
sequence lists are never allocated. The next
out-of-sequence I-frame makes l2cap_seq_list_clear()
write through the NULL srej_list.list.
Refuse the channel when a response tries to change
the mode of a connected channel.
Fixes: f2fcfcd670 ("Bluetooth: Add configuration support for ERTM and Streaming mode")
Cc: stable@vger.kernel.org
Closes: https://sashiko.dev/#/patchset/20261007144717.3832330-1-oss%40fourdim.xyz
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Siwei Zhang <oss@fourdim.xyz>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This commit is contained in:
parent
91638f53ff
commit
c1398cf11b
|
|
@ -3876,7 +3876,11 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
|
|||
}
|
||||
}
|
||||
|
||||
if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
|
||||
/* A connected channel cannot change its mode, as the new mode would
|
||||
* not be initialized.
|
||||
*/
|
||||
if (chan->mode != rfc.mode &&
|
||||
(chan->mode == L2CAP_MODE_BASIC || chan->state == BT_CONNECTED))
|
||||
return -ECONNREFUSED;
|
||||
|
||||
chan->mode = rfc.mode;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user