CVE-2026-99229 in Linux
要約
〜によって VulDB • 2026年11月02日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
io_uring/wait: stuck overflow list でスピンしないようにする
IO_CHECK_CQ_OVERFLOW_BIT が設定されている間、io_cqring_wait_schedule() はシグナルのチェックやタイムアウトの設定を行う前に即座に返り値を返し、io_cqring_wait() によるオーバーフローリストのフラッシュが行われる。その結果としてリストが空にならず、かつ CQ(Completion Queue)リングが呼び出し元が必要とする数のイベントを持っていない場合、ループは同じ結果で再開される。タスクはカーネル内でスピン状態となり、終了させることができない。
この事象が発生しないという前提があった:CQE がフラッシュできない場合はリングがいっぱいであり、min_events はリングのサイズに制限されているからである。しかし以下のケースが存在する:
- IORING_SETUP_CQE_MIXED を使用する場合、32ビット CQE には連続した2つのエントリが必要となる。1つでも空きがあればリスト上で停止し、その結果リングが cq_entries の数より少ないイベントしか保持できなくなる。シングルスレッドのアプリケーションがリングのエントリ数と同じ数のイベントを要求すると、io_uring_enter() から抜け出せなくなることがある。
- リングがいっぱいかどうかは CQ ヘッドによって決まり、これはアプリケーションが書き込み可能である。1つのスレッドが空のリング上でイベントを待っている間に、別のスレッドがヘッドを戻すことでリングがいっぱいの状態に見せかけ、CQE オーバーフローを引き起こす可能性がある。この場合、待ち側のタスクは SIGKILL によっても停止させることができない。
CQ リングに空きを作ることができるのはアプリケーションのみであるため、リストのフラッシュが失敗した場合はアプリケーション側に戻って処理を行うようにする。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.