CVE-2026-23146 Overview
A race condition vulnerability has been identified in the Linux kernel's Bluetooth HCI UART driver (hci_uart) that can lead to a null pointer dereference. The flaw exists in the hci_uart_write_work() function, where a timing window between protocol initialization and TTY write wakeup can result in accessing uninitialized memory, potentially causing a kernel panic or denial of service.
Critical Impact
Exploitation of this race condition can cause kernel crashes and system instability on Linux systems using Bluetooth HCI UART functionality.
Affected Products
- Linux kernel (multiple stable branches)
- Systems using Bluetooth HCI UART drivers
- Devices with TTY-based Bluetooth communication
Discovery Timeline
- 2026-02-14 - CVE CVE-2026-23146 published to NVD
- 2026-02-18 - Last updated in NVD database
Technical Details for CVE-2026-23146
Vulnerability Analysis
This vulnerability is a classic race condition that occurs during Bluetooth HCI UART protocol initialization. The core issue lies in the ordering of operations within hci_uart_set_proto(), where the HCI_UART_PROTO_INIT bit flag is set before the protocol's open() function is called to initialize the hu->priv pointer.
During the window between setting this flag and completing proto->open(), a TTY write wakeup event on another CPU can trigger hci_uart_tx_wakeup(), which schedules the write_work workqueue. When hci_uart_write_work() subsequently executes and calls proto->dequeue(hu), it attempts to access hu->priv before it has been initialized, resulting in a null pointer dereference.
This type of Time-of-Check Time-of-Use (TOCTOU) vulnerability is particularly dangerous in kernel drivers as it can cause immediate system instability. The race condition requires specific timing conditions to trigger, but given the concurrent nature of modern multi-core systems, exploitation is feasible under normal operating conditions.
Root Cause
The root cause is improper synchronization in the hci_uart_set_proto() function. The HCI_UART_PROTO_INIT flag signals that the protocol is ready for operations, but it is set prematurely—before hu->priv is actually initialized by proto->open(). This creates a race window where other code paths checking this flag may proceed to access uninitialized state.
The fix involves a simple reordering: moving the set_bit(HCI_UART_PROTO_INIT) call to execute only after proto->open(hu) successfully completes, ensuring that hu->priv is properly initialized before any workqueue can be scheduled.
Attack Vector
The attack vector for this vulnerability is local and requires the ability to trigger Bluetooth HCI UART operations. While the vulnerability does not require explicit user interaction beyond normal Bluetooth activity, it depends on specific timing conditions:
- An attacker or legitimate user action initiates Bluetooth HCI UART protocol setup
- During the initialization window, a concurrent TTY write wakeup occurs (either naturally or triggered)
- The write_work workqueue is scheduled and executed before proto->open() completes
- The null pointer dereference crashes the kernel
The vulnerability mechanism involves concurrent CPU operations as outlined in the race condition diagram from the CVE description. The attacker does not need elevated privileges but must have local access to trigger Bluetooth operations.
Detection Methods for CVE-2026-23146
Indicators of Compromise
- Kernel panic or oops messages referencing hci_uart_write_work or hci_uart_dequeue
- System crashes during Bluetooth initialization or connection attempts
- NULL pointer dereference errors in kernel logs with Bluetooth HCI UART stack traces
- Unexpected system reboots when Bluetooth devices are connected or configured
Detection Strategies
- Monitor kernel logs (dmesg, /var/log/kern.log) for null pointer dereference errors in the Bluetooth HCI UART subsystem
- Configure crash dump collection (kdump) to capture and analyze kernel panics for root cause analysis
- Deploy SentinelOne Singularity Platform for real-time kernel anomaly detection and crash prevention
- Audit systems for vulnerable kernel versions and prioritize patching based on Bluetooth usage
Monitoring Recommendations
- Enable kernel oops and panic logging to persistent storage for post-incident analysis
- Monitor system stability metrics for unexpected crashes or reboots, particularly correlated with Bluetooth activity
- Implement centralized log aggregation to detect patterns of Bluetooth-related kernel crashes across fleet
How to Mitigate CVE-2026-23146
Immediate Actions Required
- Update the Linux kernel to a patched version that includes the fix for this race condition
- If kernel updates cannot be immediately applied, consider disabling Bluetooth HCI UART functionality if not required
- Blacklist the hci_uart module on systems where Bluetooth over UART is not needed: echo "blacklist hci_uart" >> /etc/modprobe.d/blacklist.conf
- Monitor affected systems for kernel crashes and prioritize patching
Patch Information
The vulnerability has been fixed in multiple Linux kernel stable branches. The fix involves moving the set_bit(HCI_UART_PROTO_INIT) call to execute after proto->open(hu) succeeds, ensuring proper initialization order.
Patches are available from the following kernel commits:
- Linux Kernel Commit 03e8c90
- Linux Kernel Commit 0c3cd7a0
- Linux Kernel Commit 186d147c
- Linux Kernel Commit 53e54cb3
- Linux Kernel Commit 937a5734
- Linux Kernel Commit b0a90093
- Linux Kernel Commit ccc683f5
Workarounds
- Disable Bluetooth UART functionality by unloading or blacklisting the hci_uart kernel module on systems where it is not required
- Use alternative Bluetooth transport methods (USB-based Bluetooth adapters) that do not rely on HCI UART
- Implement strict system monitoring to detect and recover from potential kernel crashes while awaiting patch deployment
# Configuration example
# Blacklist hci_uart module to prevent loading
echo "blacklist hci_uart" | sudo tee /etc/modprobe.d/blacklist-hci-uart.conf
# Unload the module if currently loaded
sudo modprobe -r hci_uart
# Verify module is not loaded
lsmod | grep hci_uart
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


