Linux: Bluetooth: L2CAP: fix out-of-bounds write in l2cap_ecred_connect
What fixes it
- 6da5c0331fc3ef0c7b8df8269523fc3b2cce1e65LinuxCVE List
- 56c2b5831d39dc84aad2573dc3e197af1a872a05LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: L2CAP: fix out-of-bounds write in l2cap_ecred_connect
l2cap_chan_connect() tries to ensure there are no more than L2CAP_ECRED_CONN_SCID_MAX pending ECRED channels, so they fit in the same L2CAP_ECRED_CONN_REQ that l2cap_ecred_connect() constructs.
However, the check only counts deferred channels. If 6 L2CAP sockets are connected at the same time in order DDDDND (D=deferred, N=non-deferred), the last can bump the total to max+1. It results to one __le16 written out of bounds of the scid array, and an invalid ECRED_CONN_REQ being sent.
Fix by leaving room for the non-deferred pending ECRED channels in the counting in l2cap_chan_connect(), so the limit can't be exceeded.
Move counting under same critical section where the channel is added. Although race conditions involving this appear unreachable, it's easier to see.
Also add WARN_ON_ONCE check in l2cap_ecred_defer_connect() to make this less brittle.
Text from CVE List
Affected versions 12
- Linuxaffected: da49b602f7f75ccc91386e1274b3ef71676cd092 before fabc5e04f123225daf980d03f2c5a05e7f0f0a7fCVE List
- Linuxaffected: da49b602f7f75ccc91386e1274b3ef71676cd092 before ce0927eb3ee2939fab5ce3f9334bfd2fafb38481CVE List
- Linuxaffected: da49b602f7f75ccc91386e1274b3ef71676cd092 before 6da5c0331fc3ef0c7b8df8269523fc3b2cce1e65CVE List
- Linuxaffected: da49b602f7f75ccc91386e1274b3ef71676cd092 before df8c3af6132640da4788e96a02d653e642059803CVE List
- Linuxaffected: da49b602f7f75ccc91386e1274b3ef71676cd092 before 56c2b5831d39dc84aad2573dc3e197af1a872a05CVE List
- Linuxaffected: 5.7CVE List
- Linuxunaffected: all versions before 5.7CVE List
- Linuxunaffected: 6.6.160 through 6.6.*CVE List
- Linuxunaffected: 6.12.111 through 6.12.*CVE List
- Linuxunaffected: 6.18.53 through 6.18.*CVE List
- Linuxunaffected: 7.2.7 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 5
- git.kernel.org/stable/c/fabc5e04f123225daf980d03f2c5a05e7f0f0a7fReferencevia CVE List
- git.kernel.org/stable/c/ce0927eb3ee2939fab5ce3f9334bfd2fafb38481Referencevia CVE List
- git.kernel.org/stable/c/6da5c0331fc3ef0c7b8df8269523fc3b2cce1e65Referencevia CVE List
- git.kernel.org/stable/c/df8c3af6132640da4788e96a02d653e642059803Referencevia CVE List
- git.kernel.org/stable/c/56c2b5831d39dc84aad2573dc3e197af1a872a05Referencevia CVE List