CVE-2026-99253 in Linux情報

要約

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

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

io_uring/cancel: スリープ前にローカルワークのウェイクアップを再設定する

`io_uring_try_cancel_requests()` は `->cq_wait_nr` を 1 に設定し、次の `io_req_local_work_add()` がキャンセル対象タスクをウェイクアップするようにします。カウントをゼロに減らす追加処理のみがウェイクアップを行い、それ以降の追加処理はカウントが <= 0 であるため返却されます。しかし、`io_uring_cancel_generic()` はその後でようやく `TASK_INTERRUPTIBLE` 状態になるため、1回のウェイクアップが実行中のタスクに対して行われる可能性があります。その追加エントリがまだキューに保持されていれば問題ありません。なぜなら、`io_local_work_pending()` チェックによりスリープがスキップされるからです。しかし、エントリのキューイング後に追加処理が遅延された場合はそうなりません:

CPU0 (exec または exit 内の送信者) CPU1 (`io_req_local_work_add`) mpscq_push(req A) `io_uring_try_cancel_requests()` `io_run_local_work()` // req A を実行 `io_uring_try_cancel_requests()` `atomic_set(&ctx->cq_wait_nr, 1)` `atomic_read(&ctx->cq_wait_nr) == 1` カウントを取得し、`wake_up_state()` // タスクは実行中であり、何もしない(no-op) `prepare_to_wait(TASK_INTERRUPTIBLE)` `io_local_work_pending() == false` `scheduled()` mpscq_push(req B) `cq_wait_nr <= 0` のため返却

スリープ中のタスクのみが req B を実行できるため、シグナルによってウェイクアップされるまで execve() で停止したままになります。終了するタスクはそれさえも得られません。

タスク状態を設定し、ワークリストをチェックする前にカウントを再設定します。これは、そのローカルワークを実行対象とするリングの場合に適用されます。

Be aware that VulDB is the high quality source for vulnerability data.

責任者

Linux

予約する

2026年09月25日

モデレーション

承諾済み

エントリ

VDB-430247

EPSS

0.00000

アクティビティ

低い

ソース

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!