Description
The ARM PL011 UART driver in drivers/serial/uart_pl011.c fails to acknowledge receive error interrupts. On the PL011, the framing, parity, break, and overrun error interrupts (PL011_IMSC_ERROR_MASK) are cleared only by writing the interrupt-clear register UARTICR; reading the data register clears the RX interrupt and the per-byte RSR status but not the error interrupt status in MIS. The interrupt service routine pl011_isr() acknowledged only the CTS modem-status interrupt and never wrote icr for the error bits, so an asserted error interrupt remains pending after the ISR returns.

When an application enables error-interrupt reporting via the public uart_irq_err_enable() API, an attacker who controls the serial peer can deterministically assert these error bits by injecting line errors on the RX line — a baud/stop-bit mismatch or mid-character break (framing/break error), a flipped parity bit (parity error), or FIFO flooding (overrun error). Because the error interrupt is never cleared, the interrupt line stays asserted and the CPU re-enters pl011_isr() immediately and indefinitely, producing an interrupt-storm livelock from which the core makes no forward progress.

The impact is an availability-only denial of service (permanent hang), reachable from an external or removable UART peer. Exploitation is gated by configuration: the error interrupt is off by default and no in-tree subsystem enables it, so only applications that explicitly call uart_irq_err_enable() on a PL011-based, interrupt-driven port are affected. The fix makes pl011_isr() acknowledge the pending error bits via uart->icr, breaking the loop, and additionally clears the latched RSR status in pl011_err_check().
Published: 2026-08-17
Score: 4.6 Medium
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The ARM PL011 UART driver in Zephyr fails to acknowledge error interrupts due to a missing write to the interrupt-clear register. When an application enables error‑interrupt reporting, an external peer can inject framing, parity, break, or overrun errors, keeping the interrupt line asserted. The kernel repeatedly calls the ISR, creating a livelock that permanently hangs the core. The flaw is a classic case of uncontrolled resource consumption, classified as CWE‑835, and results in an availability‑only denial of service.

Affected Systems

Zephyr RTOS, particularly builds that use the PL011 UART driver and call uart_irq_err_enable() to enable error interrupts. The exact affected versions are not listed, so any Zephyr release prior to the commit that introduces the fix is potentially vulnerable.

Risk and Exploitability

With a CVSS score of 4.6, the vulnerability is of moderate severity. EPSS information is not available, and it is not yet listed in the CISA KEV catalog. Exploitation requires physical or remote communication with the external UART peer and the application must have explicitly enabled error interrupts; thus the attack vector is likely local physical or removable UART access. Given the control an attacker has over the UART line, the risk of service disruption is tangible but mitigated by the fact that error interrupts are disabled by default and no standard Zephyr subsystem enables them.

Generated by OpenCVE AI on August 17, 2026 at 17:43 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Update the Zephyr source to a version that includes the fix committed in 1069b6822ac90da2b9e6dc8a5bbe3873e9f92818.
  • Verify that application code does not call uart_irq_err_enable() on PL011 ports; remove or disable any such usage if present.
  • If a patch cannot be applied immediately, disable error interrupt reporting at runtime (ensure uart_irq_err_enable() is not invoked) to prevent the interrupt storm.

Generated by OpenCVE AI on August 17, 2026 at 17:43 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 17 Aug 2026 17:45:00 +0000

Type Values Removed Values Added
First Time appeared Zephyrproject
Zephyrproject zephyr
Vendors & Products Zephyrproject
Zephyrproject zephyr

Mon, 17 Aug 2026 16:30:00 +0000

Type Values Removed Values Added
Description The ARM PL011 UART driver in drivers/serial/uart_pl011.c fails to acknowledge receive error interrupts. On the PL011, the framing, parity, break, and overrun error interrupts (PL011_IMSC_ERROR_MASK) are cleared only by writing the interrupt-clear register UARTICR; reading the data register clears the RX interrupt and the per-byte RSR status but not the error interrupt status in MIS. The interrupt service routine pl011_isr() acknowledged only the CTS modem-status interrupt and never wrote icr for the error bits, so an asserted error interrupt remains pending after the ISR returns. When an application enables error-interrupt reporting via the public uart_irq_err_enable() API, an attacker who controls the serial peer can deterministically assert these error bits by injecting line errors on the RX line — a baud/stop-bit mismatch or mid-character break (framing/break error), a flipped parity bit (parity error), or FIFO flooding (overrun error). Because the error interrupt is never cleared, the interrupt line stays asserted and the CPU re-enters pl011_isr() immediately and indefinitely, producing an interrupt-storm livelock from which the core makes no forward progress. The impact is an availability-only denial of service (permanent hang), reachable from an external or removable UART peer. Exploitation is gated by configuration: the error interrupt is off by default and no in-tree subsystem enables it, so only applications that explicitly call uart_irq_err_enable() on a PL011-based, interrupt-driven port are affected. The fix makes pl011_isr() acknowledge the pending error bits via uart->icr, breaking the loop, and additionally clears the latched RSR status in pl011_err_check().
Title PL011 UART error interrupts never cleared, enabling an external-peer interrupt-storm denial of service
Weaknesses CWE-835
References
Metrics cvssV3_1

{'score': 4.6, 'vector': 'CVSS:3.1/AV:P/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H'}


Subscriptions

Zephyrproject Zephyr
cve-icon MITRE

Status: PUBLISHED

Assigner: zephyr

Published:

Updated: 2026-08-17T18:27:37.225Z

Reserved: 2026-06-18T15:22:24.098Z

Link: CVE-2026-12629

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-17T17:16:39.010

Modified: 2026-08-17T19:16:24.693

Link: CVE-2026-12629

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-17T17:45:03Z

Weaknesses
  • CWE-835

    Loop with Unreachable Exit Condition ('Infinite Loop')