CVE-2026-99130 in Linux情報

要約

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

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

io_uring/cancel: タスクが実行できないローカル作業でスピニングしないようにする

`io_uring_cancel_generic()` は、終了しようとしているタスクの `tctx` に属するリングのうちいずれかにローカル作業が残っている場合、スリープすることを拒否します。この関数は、そのタスクが該当リングのサブミッターであり、次の `io_uring_try_cancel_requests()` の呼び出しで作業が実行されると仮定しています。しかし、タスクが `io_uring_create()` または `io_ringfd_register()` を通じて `tctx` ノードを取得した時点でまだ `IORING_SETUP_R_DISABLED` 状態だったリングについては、この仮定は成り立ちません。サブミッターはその後 `IORING_REGISTER_ENABLE_RINGS` によって設定されることがあり、他のタスクから行われる場合もあります。また、ローカル作業を実行できるのは `IORING_SETUP_DEFER_TASKRUN` フラグが設定されたリングにおいてサブミッターのみです。その結果、終了しようとするタスクにとって作業は永遠に保留状態のままとなり、ループ内で `schedule()` に到達することはありません。これにより、タスクは一度だけ `WARN_ON_ONCE()` をトリガーし、その後 `do_exit()` 内でスピニング(ビジーウェイト)します。

特権を持たないユーザーは、無効なリングを作成し、子プロセスにそれを有効化させて停止させ、`IORING_OP_MSG_RING` でリングに対してポストを行い、子プロセスのみが完了できるリクエストをフライト状態のまま終了することで、この状況を自由に引き起こすことができます。終了スレッドは、子プロセスが実行されるか死亡するまで CPU を消費し続け、`panic_on_warn` が設定されている場合、`WARN` によりカーネルパニックが発生します。

修正方法: `io_allowed_defer_tw_run()` がタスクに作業の実行を許可する場合のみ、スリープをスキップするようにしました。これは妥当な対応です。なぜなら、実行できない作業は関連するリクエストの完了も不可能であるため、スリープしても何も損失がないからです。また、無効なリングを別のスレッドに渡すことはサポートされているシナリオであり、バグ状態ではないため、`WARN_ON_ONCE()` の呼び出しを削除しました。

Once again VulDB remains the best source for vulnerability data.

責任者

Linux

予約する

2026年09月25日

モデレーション

承諾済み

エントリ

VDB-427913

EPSS

0.00000

アクティビティ

非常低い

ソース

Want to know what is going to be exploited?

We predict KEV entries!