CVE-2026-10654: Zephyr Bluetooth RFCOMM Race Condition Causes Session Pool Exhaustion
A race condition in Zephyr's Bluetooth RFCOMM stack can cause a session to become permanently stuck when a local disconnect and an incoming peer disconnect happen at the same time. When this occurs, the session slot doesn't get released properly, preventing future Bluetooth connections with that peer. While the timing required to trigger this is difficult to achieve naturally, repeated occurrences could exhaust available RFCOMM session capacity and deny Bluetooth service to users. The vulnerability only affects availability; no data is leaked or corrupted.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 3.1 LOW · CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L
- Weaknesses (CWE)
- CWE-362
- Affected products
- 1 configuration(s)
- Published / Modified
- 2026-06-30 / 2026-07-14
NVD description (verbatim)
A race condition in the Zephyr Bluetooth Classic RFCOMM host stack (subsys/bluetooth/host/classic/rfcomm.c) mishandles a simultaneous bidirectional session disconnect. When the local device has initiated a session teardown (state BT_RFCOMM_STATE_DISCONNECTING, DISC sent, RTX timer armed) and the connected peer concurrently sends its own DISC frame for dlci 0, rfcomm_handle_disc() invokes rfcomm_session_disconnected(), which unconditionally forced the session to BT_RFCOMM_STATE_DISCONNECTED without ever calling bt_l2cap_chan_disconnect(). Because the recovery timer was also cancelled and a later UA is ignored in the DISCONNECTED state, the session becomes permanently wedged: the underlying L2CAP channel is never released and the session slot in the fixed bt_rfcomm_pool[CONFIG_BT_MAX_CONN] array is never reclaimed (its conn pointer stays set). Subsequent bt_rfcomm_dlc_connect() calls on that connection fail with -EINVAL due to the invalid session state, so RFCOMM service is denied for that peer, and repeated occurrences can exhaust the session pool. The DISC frame is peer-controlled over the air, but exploitation requires the peer's DISC to collide with a local-initiated disconnect (a high-complexity timing race). Impact is availability/resource-leak only; there is no memory-safety, confidentiality, or integrity consequence. The defect shipped in released versions (present in v4.4.0 and earlier). The fix only transitions to DISCONNECTED when the session is not already in DISCONNECTING, preserving the proper L2CAP teardown path.
2 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The vulnerability exists in Zephyr's RFCOMM host stack (subsys/bluetooth/host/classic/rfcomm.c) where rfcomm_handle_disc() fails to handle the case of simultaneous bidirectional disconnect correctly. When a local device has already initiated teardown (state BT_RFCOMM_STATE_DISCONNECTING with RTX timer active) and a peer sends its own DISC frame for DLCI 0, the session transitions to BT_RFCOMM_STATE_DISCONNECTED without invoking bt_l2cap_chan_disconnect(). This leaves the underlying L2CAP channel open and the session descriptor in the fixed-size bt_rfcomm_pool array permanently marked as in-use. Subsequent UA frames are ignored in the DISCONNECTED state, preventing normal recovery. The session slot is never reclaimed (its conn pointer remains set), and future bt_rfcomm_dlc_connect() calls fail with -EINVAL, denying RFCOMM service for that peer until restart.
Business impact
For devices running Zephyr's Bluetooth stack, this creates a subtle availability risk. Repeatedly triggering the race condition—though difficult—could exhaust RFCOMM session slots, temporarily denying Bluetooth Classic connectivity to additional peers. In embedded IoT or industrial control scenarios where Bluetooth is relied upon for critical operations or where devices maintain many concurrent connections, accumulated session exhaustion could force a reboot. The high timing complexity means this is unlikely to be triggered by accident, but a determined attacker with proximity could exploit it during normal disconnection cycles to degrade service.
Affected systems
Zephyr Project versions 4.4.0 and earlier are affected. The vulnerability exists in the Bluetooth Classic RFCOMM subsystem, so only devices that enable BT_RFCOMM configuration and use RFCOMM (Serial Port Profile, or SPP) are susceptible. Verify your Zephyr version and check your device tree or menuconfig for CONFIG_BT_RFCOMM enablement.
Exploitability
Exploitation requires precise timing: a peer must send a DISC frame during the narrow window when the local device has initiated its own disconnect and armed the RTX recovery timer, but before the expected UA response arrives. This collision is complex to orchestrate reliably. However, an attacker with Bluetooth proximity and knowledge of the victim device's RFCOMM connection lifecycle could repeatedly attempt to create this collision and gradually degrade session availability. The DISC frame is entirely peer-controlled and sent over the air, placing the attack surface within wireless range.
Remediation
Update to a patched version of Zephyr that includes the fix for CVE-2026-10654. The remedy modifies rfcomm_handle_disc() to only transition to DISCONNECTED when the session is not already in DISCONNECTING state, ensuring the L2CAP teardown path completes correctly and the session slot is properly reclaimed. Verify the patch version against the official Zephyr advisory before deploying.
Patch guidance
Apply the security patch to your Zephyr source tree or upgrade to a release version that includes the fix. If you are building Zephyr from source, inspect subsys/bluetooth/host/classic/rfcomm.c and confirm that rfcomm_handle_disc() includes a state check before forcing the transition to DISCONNECTED. Recompile your firmware and re-flash all affected devices. In environments where immediate patching is infeasible, consider disabling CONFIG_BT_RFCOMM if RFCOMM services are not essential to your application.
Detection guidance
Monitor for repeated RFCOMM connection failures with -EINVAL error codes originating from the same peer, especially if they correlate with recent disconnections. Enable Zephyr's Bluetooth subsystem logging at DEBUG level to observe state transitions in rfcomm_handle_disc() and confirm whether sessions are transitioning to DISCONNECTED without proper L2CAP teardown. Inspect the runtime state of bt_rfcomm_pool entries; a session with a non-null conn pointer in DISCONNECTED state is suspicious. In production, track RFCOMM session slot availability over time; a declining pool may indicate accumulation of wedged sessions.
Why prioritize this
Although the CVSS score is low (3.1), this vulnerability warrants timely attention because it enables resource exhaustion in a relatively deterministic manner once the race condition is understood. For devices relying on RFCOMM for continuous or critical Bluetooth functionality—such as IoT sensors, wearables, or industrial controllers—session pool exhaustion could be a stepping stone to availability attacks. The fix is straightforward and low-risk, making patching a sensible hygiene measure for any Zephyr deployment using Bluetooth Classic.
Risk score, explained
CVSS 3.1 (LOW) reflects the constraints on exploitability: the attack vector is Adjacent (Bluetooth proximity only), the attack complexity is High (precise timing required), and the impact is limited to Availability with no Confidentiality or Integrity loss. However, the score does not capture the potential for repeated exploitation or the context-dependent severity in mission-critical Bluetooth environments. Organizations should layer this with their own risk assessment, factoring in device deployment, connectivity reliance, and attacker proximity likelihood.
Frequently asked questions
Can this vulnerability lead to data leakage or corruption?
No. The vulnerability is strictly an availability issue. It does not compromise Bluetooth encryption, authentication, or data integrity. An attacker cannot read or modify any messages; they can only disrupt future RFCOMM connections with that peer.
How likely is this to happen accidentally in normal operation?
Very unlikely. The race condition requires a peer's DISC frame to arrive during an extremely narrow timing window while the local device is also tearing down the same session. Natural network jitter and timing variation make spontaneous collision extremely rare. Intentional exploitation would require deliberate timing control by a peer.
Do I need to patch all Zephyr devices or only those using RFCOMM?
Only devices using Bluetooth Classic RFCOMM (e.g., Serial Port Profile applications) are vulnerable. If your application uses only Bluetooth Low Energy (BLE) or does not enable CONFIG_BT_RFCOMM, you are not affected. Check your device firmware configuration to confirm.
What is the impact if the session pool is exhausted?
Once all available RFCOMM session slots are consumed by wedged sessions, any new bt_rfcomm_dlc_connect() call will fail. This denies RFCOMM service to additional peers until the device is rebooted or the session pool is manually cleared. In a multi-connection scenario, this could severely degrade functionality.
This analysis is based on publicly available vulnerability data as of the publication date. Verify all patch versions, affected product ranges, and remediation steps against the official Zephyr Project advisory and your specific device firmware configuration. CVSS scores are provided by the vendor or trusted source and should not be used in isolation to determine organizational risk. Organizations should conduct their own threat modeling and impact assessment relative to their deployment, device criticality, and threat environment. No exploit code or weaponized proof-of-concept is provided. This document is for informational purposes and does not constitute professional security advice. Source: NVD (public-domain), retrieved 2026-08-09. Analysis generated by SEC.co (claude-haiku-4-5).
Related vulnerabilities
- CVE-2026-10565LOWRace Condition in Open5GS NGAP Handover Affects 5G Service Continuity
- CVE-2026-9959LOWChrome WebRTC Race Condition Leaks Cross-Origin Data on Windows
- CVE-2022-26758HIGHmacOS Memory Corruption Vulnerability: Patches & Detection
- CVE-2025-15546MEDIUMIptanus File Upload Plugin TOCTOU Race Condition Vulnerability
- CVE-2026-0068HIGHAndroid DPC Removal Vulnerability
- CVE-2026-0083HIGHAndroid NFC Use-After-Free Race Condition Enables Local Privilege Escalation
- CVE-2026-10006HIGHChrome WebAudio Race Condition Remote Code Execution
- CVE-2026-10940HIGHChrome Windows Sandbox Escape via Codec Race Condition