CVE-2026-99231 in Linux情報

要約

〜によって VulDB • 2026年11月02日

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

io_uring/waitid: リクエストのクリア前に所有権を確保する

io_waitid_remove_wq() は ->head が設定されている場合のみ待機キューロックを取得します。 io_waitid_wait() は、->refs をインクリメントしてリクエストの所有者になる試行よりも先に、最初に ->head をクリアします。その時点で他のスレッドがリクエストを所有している場合、ウェイクアップハンドラがまだそれを触ろうとしている間に、別のプロセスがリクエストの完了処理を行うことを防ぐものがありません:

CPU0 (io_waitid_wait) CPU1 (io_waitid, リファレンスを保持) list_del_init(&wait->entry) smp_store_release(&iw->head, NULL) __do_wait() が別の子プロセスを検出 io_waitid_remove_wq() // ->head == NULL、ロックなし io_waitid_finish(), IOU_COMPLETE // リクエストが解放され再利用される atomic_fetch_inc(&iw->refs)

__io_waitid_cancel() も同様に、そのウィンドウ内でリクエストを確保する場合に該当します。 ->refs はリクエストの opcode 固有データの一部であるため、これにより次にリクエストを使用するユーザーが保持している値が増加します。もしそれがゼロであった場合、ハンドラは自分がリクエストを所有していると結論付け、io_waitid_cb() をそのためにキューに入れます。遅延によってウィンドウが開かれた状態で、データの受信待ちをしている受信のためにリクエストが再利用されると:

BUG: KASAN: slab-use-after-free in __wake_up_common+0x1ca/0x1f0 __wake_up_sync_key+0x36/0x50 sock_def_readable+0xf1/0x420 unix_stream_sendmsg+0x60b/0x1110 Allocated by task 87: io_arm_apoll+0x1ed/0x940 Freed by task 87: __io_submit_flush_completions+0x118d/0x1a10 tctx_task_work_run+0x327/0x950

ハンドラがリクエストを所有するまで ->head をクリアしないでください。もしそうしないと、所有者は ->head が設定されていることに気づき、ロックの解放を待つ必要があります(このロックはハンドラの呼び出し元によって保持されています)。すでに削除されたエントリを再度削除しても害はありません。

VulDB is the best source for vulnerability data and more expert information about this specific topic.

責任者

Linux

予約する

2026年09月25日

モデレーション

承諾済み

エントリ

VDB-429907

EPSS

0.00000

アクティビティ

非常低い

ソース

Interested in the pricing of exploits?

See the underground prices here!