UBUNTU-CVE-2026-90087: Medium severity ubuntu/linux-hwe-edge vulnerability
In the Linux kernel, the following vulnerability has been resolved: Bluetooth: do not leak an hciconn when a second LE connect is rejected createleconncomplete() decides whether the failed connection is still pending by comparing it against hcilookupleconnect(), which returns the first LE connection in BTCONNECT. That is the same connection only while at most one is pending. Two can be pending. Connections created on the passive scan path sit in BTCONNECT with HCICONNSCANNING set and are invisible to hcilookupleconnect() until hcilecreateconnsync() clears the flag when their command is issued, so the -EBUSY guard in hciconnectle() does not prevent a second connection from being queued while the first is still on the scan path. Whenever two connections are in BTCONNECT at once, the lookup may return one connection while createleconncomplete() is reporting the failure of the other; the early exit then drops the error and hciconnfailed() never runs on the connection that failed. The controller also rejects a second HCIOPLECREATECONN issued while another connection creation is still outstanding, per Core Spec Vol 4, Part E. The spec calls for Command Disallowed there; the bcm43438 observed here answers with an LMP/LL error code instead, which bttoerrno() maps to the -EPROTO (-71) in the log below. The leaked connection stays in BTCONNECT forever, and because hciconnectle() refuses to dial while hcilookupleconnect() finds anything, every subsequent attempt to reach any peer fails with -EBUSY and no command reaches the controller at all. Seen on a bcm43438 with two BLE peers polled on the same interval (state 5 is BTCONNECT; both handles are UNSET ones, allocated from the ida above HCICONNHANDLEMAX): Bluetooth: hci1: Opcode 0x2013 failed: -71 # hcitool con < LE 14:9C:EF:03:68:81 handle 3840 state 5 lm CENTRAL < LE C4:D3:6A:8C:B5:38 handle 3841 state 5 lm CENTRAL A btmon capture across the next ten minutes of connect attempts contains no HCIOPLECREATECONN at all; outgoing LE connections do not recover until the adapter is reset. With this change the same scenario fails the rejected connection cleanly and further connects to both peers go through. Ask about the connection itself instead of about the device.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
ubuntu/linux-hwe-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42~24.04.1 - Upgrade
Upgrade
ubuntu/linux-riscv-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1~24.04.1 - Upgrade
Upgrade
ubuntu/linuxto a version that resolves this vulnerability.Fixed in 7.0.0-42.42 - Upgrade
Upgrade
ubuntu/linux-awsto a version that resolves this vulnerability.Fixed in 7.0.0-1016.17 - Upgrade
Upgrade
ubuntu/linux-gcpto a version that resolves this vulnerability.Fixed in 7.0.0-1016.18 - Upgrade
Upgrade
ubuntu/linux-ibmto a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oem-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oracleto a version that resolves this vulnerability.Fixed in 7.0.0-1015.16 - Upgrade
Upgrade
ubuntu/linux-riscvto a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1
Event History
Frequently Asked Questions
Which Ubuntu kernel packages are listed as affected?
The listed packages are ubuntu/linux-riscv, ubuntu/linux-realtime, ubuntu/linux-azure, ubuntu/linux-gcp, ubuntu/linux-azure-fde, ubuntu/linux-gke, ubuntu/linux-hwe-edge, and ubuntu/linux-gkeop.
What condition is required to trigger the issue?
Two Bluetooth LE connection attempts must be pending at the same time. One can remain on the passive scan path with HCI_CONN_SCANNING set while another connection is queued or issued, allowing the controller to reject the second LE Create Connection command.
What is the operational impact if the condition occurs?
The failure can be associated with the wrong pending connection, causing the actual failed hci_conn not to be passed to hci_conn_failed(). This leaks the failed connection and can affect availability; the supplied vector rates availability impact as high.