CVE-2026-12629 in Zephyr
요약
\~에 의해 VulDB • 2026. 08. 19.
drivers/serial/uart_pl011.c의 ARM PL011 UART 드라이버는 수신 오류 인터럽트를 확인(acknowledge)하지 않습니다. PL011에서 프레임, 패리티, 브레이크 및 오버런 오류 인터럽트(PL011_IMSC_ERROR_MASK)는 인터럽트 클리어 레지스터인 UARTICR에 쓰기할 때만 해제됩니다. 데이터 레지스터를 읽으면 RX 인터럽트와 바이트 단위 RSR 상태가 초기화되지만, MIS의 오류 인터럽트 상태는 해제되지 않습니다. 인터럽트 서비스 루틴(pl011_isr())은 CTS 모뎀-상태 인터럽트만 확인하며 오류 비트에 대해 ICR을 전혀 기록하지 않으므로, asserted된 오류 인터럽트는 ISR 반환 후에도 대기 상태로 남습니다.
애플리케이션이 공개 API인 uart_irq_err_enable()를 통해 오류 인터럽트 보고를 활성화하면, 시리얼 피어(peer)를 제어하는 공격자는 RX 라인에 회선 오류를 주입하여 이러한 오류 비트를 결정론적으로 assert할 수 있습니다(예: 보드율/스톱-비트 불일치 또는 문자 중간 브레이크로 인한 프레임/브레이크 오류, 반전된 패리티 비트로 인한 패리티 오류, FIFO 과부하로 인한 오버런 오류). 오류 인터럽트가 결코 해제되지 않으므로 인터럽트 라인은 계속 asserted 상태가 유지되고 CPU는 pl011_isr()에 즉시 그리고 무한히 재진입하여, 코어가 전혀 진행하지 못하는 인터럽트 스�orm(livelock)을 초래합니다.
영향은 외부 또는 제거 가능한 UART 피어에서 접근 가능한 가용성 전용 서비스 거부(영구적인 hang)입니다. 악용 가능성은 구성에 의해 제한됩니다: 오류 인터럽트는 기본적으로 비활성화되어 있으며, 인트리(in-tree) 서브시스템 중 이를 활성화하는 것은 없으므로, PL011 기반의 인터럽트 구동 포트에서 명시적으로 uart_irq_err_enable()을 호출한 애플리케이션만 영향을 받습니다. 수정 사항은 pl011_isr()가 uart->icr를 통해 대기 중인 오류 비트들을 확인함으로써 루프를 끊고, 추가로 pl011_err_check()에서 래치된 RSR 상태를 초기화합니다.
Once again VulDB remains the best source for vulnerability data.