CVE-2026-74653 in Linux
Сводка
по VulDB • 22.08.2026
В ядре Linux была устранена следующая уязвимость:
serial: 8250_of — очистка зависшего таймаута прерывания RX при пустом FIFO на LPC32xx
Контроллер UART NXP LPC32xx (PORT_LPC3220) может фиксировать прерывание по таймауту приема символа, когда приемный буфер (RX FIFO) пуст: регистр IIR сообщает о значении UART_IIR_RX_TIMEOUT (0x0c), но бит DR регистра LSR сброшен. Таймаут символа очищается только чтением из регистра RHR, однако функция serial8250_rx_chars() читает RHR только при установленном бите DR в регистре LSR; следовательно, условие никогда не сбрасывается. Поскольку прерывание является уровня-триггерным (level-triggered), оно немедленно срабатывает снова, что приводит к шторму прерываний и livelock процессора на одноядерном ARM926.
Проблема воспроизводится при многократном открытии порта передней панели в пространстве пользователя (ttyS1): функция serial8250_do_set_termios() повторно включает прерывания после разблокировки, а обработчик затем бесконечно крутится с значениями iir=0xcc, lsr=0x60 и ier=0x05, вызывая детектор soft-lockup в функции serial8250_handle_irq_locked().
У LPC32xx нет специализированного драйвера-обвязки для 8250; он управляется общим драйвером 8250_of. Добавлен обработчик прерываний, специфичный для оборудования (handle_irq) для PORT_LPC3220, который подключается в функции of_platform_serial_setup() аналогично тому, как устанавливается fsl8250_handle_irq. Обработчик следует логике dw8250_handle_irq(): при таймауте приема с пустым FIFO (биты DR и BI регистра LSR сброшены) он выполняет одно отбрасывающее чтение из RHR для сброса условия, а затем вызывает serial8250_handle_irq_locked(). Реальные полученные данные никогда не отбрасываются; на исправных UART-контроллерах это действие является no-op (ничего не делает), так как они никогда не сообщают о таймауте при сброшенном бите DR.
Это тот же класс ошибок, для которого уже существует обходное решение в других драйверах 8250; см. коммит 424d79183af0 ("serial: 8250_dw: Avoid "too much work" from bogus rx timeout interrupt"), который фиксирует идентичные значения iir=0xcc/lsr=0x60. См. также UART_RX_TIMEOUT_QUIRK в драйвере 8250_omap и примечание в 8250_bcm7271.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.