Katalog CVE

CVE-2026-12629

ŚrednieCVSS 4.6
Opublikowano: Zaktualizowano: Przetłumaczono: NVD NIST

Prawdopodobieństwo exploitacji (EPSS)

Niskie ryzyko
0.17%

Percentyl 6 - wyżej niż 6% wszystkich znanych CVE

Streszczenie

Sterownik ARM PL011 UART (drivers/serial/uart_pl011.c) nie potwierdza przerwań błędów odbioru. Błędy ramki, parzystości, przerwy i nadmiaru są czyszczone tylko przez zapis do rejestru UARTICR, ale procedura przerwania pl011_isr() tego nie robi, co powoduje, że przerwanie pozostaje aktywne po zakończeniu obsługi. Atakujący kontrolujący port szeregowy może wywołać te błędy, prowadząc do niekończącej się burzy przerwań i trwałego zawieszenia systemu.

Ocena ryzyka

Ryzyko polega na możliwości zdalnego lub lokalnego (przez port szeregowy) trwałego zawieszenia systemu (DoS), jeśli aplikacja jawnie włączy raportowanie przerwań błędów przez uart_irq_err_enable(). Atakujący może celowo wstrzyknąć błędy linii, powodując brak postępu CPU i niedostępność usług.

Rekomendacja

Zastosuj poprawkę od producenta, która dodaje potwierdzenie błędów w pl011_isr() (zapis do UARTICR) oraz czyści zablokowany status RSR w pl011_err_check(). Jeśli poprawka nie jest dostępna, unikaj używania uart_irq_err_enable() na portach PL011 lub wyłącz przerwania błędów w konfiguracji.

Inne podatności w Linux kernel

Zobacz wszystkie
Oryginalny opis (angielski, źródło NVD)

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().

Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS