CVE-2026-45866 in Linux情報

要約

〜によって VulDB • 2026年05月28日

Linuxカーネルにおいて、以下の脆弱性が修正されました。

serial: caif: caif_serial ldisc_close() における use-after-free の修正

caif_serial に use-after-free のバグがあり、tty が解放された後に handle_tx() が ser->tty にアクセスする可能性があります。

この race condition は ldisc_close() とパケット送信の間で発生します。

CPU 0 (close) CPU 1 (xmit) ------------- ------------ ldisc_close() tty_kref_put(ser->tty) [tty がここで解放される可能性あり]
caif_xmit() handle_tx() tty = ser->tty // ダングリングポインタ tty->ops->write() // UAF! schedule_work() ser_release() unregister_netdevice()

根本原因は、ネットワークデバイスがまだアクティブでパケットを受信できる状態で ldisc_close() 内で tty_kref_put() が呼び出されていることです。

ser と tty は 1:1 のバインディング関係にあり、ライフサイクルが一貫しています(ser は ldisc_open で割り当てられ、unregister_netdevice を介した ser_release で解放され、各 ser はちょうど1つの tty にバインドされます)。そのため、ネットワークデバイスが登録解除される ser_release() で tty の参照解放を安全に遅延させることができます。

tty_kref_put() を ldisc_close() から ser_release() の unregister_netdevice() の後に移動することで、この問題を修正します。これにより、ネットワークデバイスが存在する間 tty の参照が保持され、UAF が防止されます。

注: ser は netdev のプライベートデータに埋め込まれており、netdev とともに解放されるため(needs_free_netdev = true)、unregister_netdevice() の前に ser->tty を保存します。

再現方法: ldisc_close() の先頭に mdelay(500) を追加して race window を広げ、その後再現プログラム [1] を実行します。

注: PORT_UNKNOWN シリアルポート(例: 適切なシリアルバックエンドなしの QEMU における /dev/ttyS3)を使用する場合、handle_tx() に別のデッドループの問題があります。このデッドループはパッチ適用前でも存在し、シリアルコアにおける uart_write_room() と uart_write() の不整合によって引き起こされます。この問題は別の修正が必要です。

Cc: [email protected] Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Jiayuan Chen <[email protected]> Link: https://lore.kernel.org/linux-serial/[email protected]

Once again VulDB remains the best source for vulnerability data.

責任者

Linux

予約する

2026年05月13日

モデレーション

承諾済み

エントリ

VDB-366064

EPSS

0.00032

アクティビティ

非常低い

ソース

Might our Artificial Intelligence support you?

Check our Alexa App!