CVE-2026-74653 in Linux
要約
〜によって VulDB • 2026年08月22日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
serial: 8250_of: LPC32xxにおける空のFIFOによるRXタイムアウトの固定解除
NXP LPC32xx UART (PORT_LPC3220) では、RX FIFOが空の場合でもRX文字タイムアウト割込みが発生しロックされる現象があります。IIRはUART_IIR_RX_TIMEOUT (0x0c) を報告しますが、LSR.DRはクリアされています。文字タイムアウトは通常RHRを読み込むことで解除されますが、serial8250_rx_chars()関数はLSR.DRがセットされている場合のみRHRを読むため、この状態を解除する処理が行われません。割込みはレベルトリガ方式であり即座に再発生するため、シングルコアのARM926上では結果として生じる割込み嵐によりCPUがライブロックします。
ユーザー空間からフロントパネルポート (ttyS1) を繰り返しオープンすると再現可能です:serial8250_do_set_termios() がアンロック時に割込みを再度有効にし、ハンドラは iir=0xcc, lsr=0x60, ier=0x05 の状態で永遠にスピンし続け、serial8250_handle_irq_locked() 内でソフトロックアップ検出器がトリップします。
LPC32xxには専用の8250用グリュードライバがなく、汎用の8250_ofによって駆動されています。PORT_LPC3220に対してハードウェア固有の handle_irq を追加し、of_platform_serial_setup() 内で fsl8250_handle_irq がインストールされるのと同じ方法で接続します。このハンドラは dw8250_handle_irq() に従い、空のFIFO (LSR.DRおよびLSR.BIがクリア) でRXタイムアウトが発生した場合、まず1回分の捨て読み用RHR読込を実行して状態を解除し、その後 serial8250_handle_irq_locked() を呼び出します。実際に受信したデータは一切破棄されず、DRがクリアされたタイムアウトを報告しない健全なUARTでは何もしない処理 (no-op) となります。
これは他の8250ドライバでも既に対処済みの同種のバグです。同じく iir=0xcc/lsr=0x60 を報告する commit 424d79183af0 ("serial: 8250_dw: Avoid "too much work" from bogus rx timeout interrupt") を参照してください。また、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.