CVE-2026-74653 in Linux
摘要
由 VulDB • 2026-08-22
在 Linux 内核中,已修复以下漏洞:
serial: 8250_of: 清除 LPC32xx 上卡住的空 FIFO RX 超时状态
NXP LPC32xx UART (PORT_LPC3220) 会在接收(RX)FIFO 为空时锁存一个字符超时中断:IIR 报告 UART_IIR_RX_TIMEOUT (0x0c),但 LSR.DR 位为清除状态。只有读取 RHR 才能清除此类字符超时,但 serial8250_rx_chars() 仅在 LSR.DR 置位时才读取 RHR,因此该条件永远无法被清除。由于中断是电平触发的且会立即重新触发,因此在单核 ARM926 上会导致中断风暴并使 CPU 陷入活锁(livelock)。
当用户空间反复打开前面板端口 (ttyS1) 时可重现此问题:serial8250_do_set_termios() 在解锁时重新启用中断,随后处理程序会无限自旋,此时 iir=0xcc、lsr=0x60、ier=0x05,从而触发 serial8250_handle_irq_locked() 中的软锁检测器。
LPC32xx 没有专用的 8250 glue driver(胶水驱动),而是由通用的 8250_of 驱动。为 PORT_LPC3220 添加一个硬件特定的 handle_irq,其安装方式与 fsl8250_handle_irq 在 of_platform_serial_setup() 中的安装方式相同。该处理程序遵循 dw8250_handle_irq() 的逻辑:当发生 RX 超时且 FIFO 为空(LSR.DR 和 LSR.BI 均为清除状态)时,它执行一次丢弃式 RHR 读取以清除此条件,然后调用 serial8250_handle_irq_locked()。实际上不会丢弃任何接收到的数据,并且对于从未报告 DR 为清除状态的正常 UART,此操作为空操作(no-op)。
这是已在其他 8250 驱动中通过变通方法解决的同类漏洞;参见提交记录 424d79183af0 ("serial: 8250_dw: Avoid "too much work" from bogus rx timeout interrupt"),其中报告了相同的 iir=0xcc/lsr=0x60。另见 8250_omap 中的 UART_RX_TIMEOUT_QUIRK 以及 8250_bcm7271 中的相关说明。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.