CVE-2026-10642: Zephyr PL011 UART Infinite Loop Denial of Service (CWE-835)
The Zephyr RTOS PL011 UART driver contains a loop that can spin indefinitely when hardware flow control (CTS) is enabled and the connected device stops asserting the CTS signal during data transmission. When this happens, the thread attempting to send data hangs, freezing the entire execution context and breaking serial communication—typically affecting Bluetooth HCI and other serial-dependent subsystems. An attacker with physical or adjacent access to the CTS line (such as by controlling an external Bluetooth module) can trigger this denial of service. Versions 4.1.0 through 4.4.0 are affected; patched releases address the issue by checking CTS status and using the modem-status interrupt to resume when CTS recovers.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 4.6 MEDIUM · CVSS:3.1/AV:P/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- Weaknesses (CWE)
- CWE-835
- Affected products
- 1 configuration(s)
- Published / Modified
- 2026-06-24 / 2026-07-14
NVD description (verbatim)
The Zephyr PL011 UART driver (drivers/serial/uart_pl011.c) contains an unbounded software loop in pl011_irq_tx_enable() that repeatedly invokes the interrupt-driven application callback while the TX interrupt mask bit (PL011_IMSC_TXIM) is set, to work around the controller's level-transition TX-interrupt behavior. When CTS hardware flow control is enabled (devicetree hw-flow-control or runtime UART_CFG_FLOW_CTRL_RTS_CTS) and the wired serial peer de-asserts CTS, the controller stops draining the TX FIFO; pl011_fifo_fill() then returns 0 on every call while the application still has pending data and therefore never disables the TX interrupt. The loop condition never clears, so the thread that called uart_irq_tx_enable() (e.g. h4_send() in the Bluetooth HCI H4 driver) spins indefinitely, hanging the executing context and stalling the transport — a denial of service (CWE-835). An attacker controlling the device attached to the UART's CTS line can trigger the hang by withholding CTS during transmission. Because that peer is the device wired to the UART — which may be a removable or external module (e.g. an off-board Bluetooth controller on the HCI H4 link) rather than a permanently-bonded on-PCB part — the attack vector is scored Adjacent (AV:A) rather than Physical; the security subcommittee should confirm the vector against the specific deployment. Impact is availability only; there is no memory-safety, confidentiality, or integrity consequence. The vulnerable loop was introduced in commit b783bc8448ef (Feb 2025) and shipped in releases v4.1.0 through v4.4.0. The fix breaks out of the loop when CTS is blocking and arms the CTS modem-status interrupt to resume transmission when CTS re-asserts.
2 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The vulnerability resides in the pl011_irq_tx_enable() function within drivers/serial/uart_pl011.c. The function implements a workaround for the PL011 UART controller's level-transition TX-interrupt behavior by looping while the TX interrupt mask (PL011_IMSC_TXIM) is set and repeatedly invoking the application callback. However, when hardware flow control is active and the peer de-asserts CTS, the TX FIFO stops draining. The pl011_fifo_fill() function then returns 0 on each iteration while pending data remains unflushed, so the TX interrupt is never disabled—the loop condition never clears. This causes an unbounded spin in the calling thread's execution context (CWE-835: Infinite Loop). The flaw was introduced in commit b783bc8448ef in February 2025 and shipped in v4.1.0–v4.4.0. The fix breaks the loop when CTS is blocking and arms the CTS modem-status interrupt to resume transmission upon CTS reassertion.
Business impact
This vulnerability disrupts any Zephyr-based system relying on serial protocols over affected UART configurations. Bluetooth HCI stacks (e.g., h4_send() in the HCI H4 driver) are directly affected, freezing wireless stacks and rendering devices non-responsive. Real-time embedded systems and IoT devices cannot tolerate thread hangs; a single attacker-triggered hang in the UART driver can cascade through the entire device, preventing normal operation, breaking wireless connectivity, or forcing a reboot. Devices with external or removable serial modules (such as off-board Bluetooth controllers) face elevated risk because an attacker can physically intercept or spoof the CTS signal.
Affected systems
Zephyr RTOS releases v4.1.0, v4.2.0, v4.3.0, and v4.4.0 are affected when the PL011 UART driver is used with hardware flow control (CTS/RTS) enabled. The vulnerability is activated only when: (1) the PL011 UART is configured with hw-flow-control in the device tree or via runtime UART_CFG_FLOW_CTRL_RTS_CTS setting, and (2) the connected peer device withholds or de-asserts CTS during transmission. Systems without hardware flow control enabled, or using other UART drivers (e.g., NSIM, NXP, STMicroelectronics variants), are unaffected.
Exploitability
Exploitability requires physical or adjacent access to the UART's CTS signal line. An attacker controlling or spoofing the peer device on a CTS-enabled UART link can withhold CTS at will, triggering an indefinite spin in the TX-enable routine. The attack requires no user interaction, authentication, or special privileges; it is deterministic and repeatable. Attack surface is highest for systems with external or removable modules (e.g., off-board Bluetooth chips on a debug header, USB-to-serial adapters, or cellular modems). On-board permanently-soldered components present lower risk unless the attacker has direct physical board access. The CVSS vector AV:P (Physical) was assigned conservatively; however, the advisory flags that systems with removable/external serial peers (classified as Adjacent under AV:A) should have their specific deployments reviewed by the security team.
Remediation
Update Zephyr RTOS to the patched release (v4.5.0 or later—verify against the official Zephyr security advisory for exact version). The patch modifies pl011_irq_tx_enable() to check CTS status before entering the loop; if CTS is blocking, the routine breaks out and arms the CTS modem-status interrupt rather than spinning. When CTS re-asserts, the interrupt handler resumes transmission. For systems unable to patch immediately, disable hardware flow control (hw-flow-control = <0> in device tree) if the serial peer does not require it, or implement a timeout wrapper around uart_irq_tx_enable() calls as a temporary mitigation—though this is not a substitute for patching.
Patch guidance
Apply the official Zephyr patch from the security advisory corresponding to your release branch. The fix is integrated into v4.5.0 and later. Backports may be available for earlier LTS branches; check the Zephyr security advisories and release notes. After patching, rebuild and redeploy the firmware image. Test serial communication, particularly Bluetooth HCI and any other subsystems relying on the PL011 UART, to confirm CTS flow control works as expected.
Detection guidance
Monitor for thread hangs or watchdog resets involving UART driver components, particularly in contexts calling uart_irq_tx_enable() (e.g., h4_send() in Bluetooth). Kernel logs or debugger traces showing an indefinite loop in pl011_irq_tx_enable() or spin in uart_irq_tx_enable() are diagnostic. On live systems, inspect device tree or runtime UART configuration to determine if hw-flow-control is enabled on any PL011 instances. Audit serial peer devices (Bluetooth modules, modems, etc.) for any anomalies in CTS signal behavior; CTS de-assertion without corresponding data activity may indicate an attack or device failure. Network packet captures or Bluetooth traffic logs may show sudden cessation of activity corresponding to a hang event.
Why prioritize this
Although CVSS severity is rated MEDIUM (4.6), prioritization should be elevated for Zephyr deployments with external or removable UART peer devices, particularly Bluetooth HCI systems. The hang is deterministic, requires minimal attacker capability (adjacent access to a CTS line), and causes complete denial of service to the transport layer. Real-time systems and wireless IoT devices cannot tolerate indefinite thread stalls. Conversely, systems with only on-board permanent serial components and no hardware flow control enabled face significantly lower risk and may be deprioritized accordingly.
Risk score, explained
The CVSS 3.1 score of 4.6 (MEDIUM) reflects: (1) Physical/Adjacent Attack Vector—the attacker must have wired access to the CTS signal, (2) High Availability Impact—the hang completely disrupts the UART and dependent subsystems, but (3) No Confidentiality or Integrity impact—the vulnerability does not leak or corrupt data. The low base score reflects the narrow attack surface and lack of memory-safety consequences. However, in deployments with removable or externally-controlled serial modules, the practical risk may exceed this base score, warranting context-specific risk assessment.
Frequently asked questions
Does this vulnerability affect my system if I am not using hardware flow control?
No. The vulnerability is triggered only when the PL011 UART is configured with hw-flow-control enabled (in device tree or at runtime via UART_CFG_FLOW_CTRL_RTS_CTS). Systems without flow control enabled are not affected.
What Zephyr releases are vulnerable?
Zephyr RTOS versions 4.1.0 through 4.4.0 are vulnerable. The flaw was introduced in commit b783bc8448ef in February 2025. Verify your exact release and check the official Zephyr security advisory for patched versions and backport availability.
Can I work around this vulnerability without upgrading Zephyr immediately?
Temporarily, you can disable hardware flow control on the affected PL011 UART if your serial peer device does not require it. However, this is a mitigation only and not a substitute for patching. If flow control is mandatory, upgrade to a patched release as soon as possible.
How would an attacker exploit this remotely without physical access to the CTS line?
They cannot. The attack requires wired adjacent access to the CTS signal. However, if your device includes a removable or externally-accessible serial module (e.g., a Bluetooth controller on a debug header or a USB serial adapter), an attacker with physical proximity or presence in your facility could manipulate that module's CTS behavior.
This analysis is based on the vulnerability description and official CVE record as of the publication date. Patch version numbers, KEV status, and specific affected products must be verified against the official Zephyr security advisory and vendor releases. Exploit code is not provided. Organizations should verify their specific Zephyr deployment, device tree configuration, and serial peer devices before applying mitigations. Attack vector classification (Physical vs. Adjacent) should be confirmed against your deployment topology. This explainer is for informational purposes and does not constitute legal or procurement advice. Source: NVD (public-domain), retrieved 2026-08-02. Analysis generated by SEC.co (claude-haiku-4-5).
Related vulnerabilities
- CVE-2026-10028MEDIUMglib-networking GnuTLS Certificate Validation Denial-of-Service
- CVE-2026-41150MEDIUMMermaid Gantt Chart DoS via Excludes Attribute
- CVE-2026-44740MEDIUMBilly Go Library Denial-of-Service via Input Validation Flaws
- CVE-2026-46146MEDIUMLinux Kernel USB Audio Infinite Loop DoS Vulnerability
- CVE-2026-46314MEDIUMLinux Kernel DRM v3d Infinite Loop DoS Vulnerability
- CVE-2026-46521MEDIUMImageMagick LZMA Out-of-Bounds Write – Patch & Detection Guide
- CVE-2026-48733MEDIUMImageMagick Infinite Loop Denial-of-Service Vulnerability
- CVE-2026-48986MEDIUMpam_usb Infinite Loop DoS in Process Parent ID Lookup