CVE-2026-99227 in Linux
要約
〜によって VulDB • 2026年11月03日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
io_uring/waitid: キャンセル参照のラップアラウンドを防止する
io_waitidは、取消状態を取り消しフラグ(BIT(31))と31ビットの参照カウンター(bits 30:0)にパックして->refsフィールドに格納します。具体的には以下の定義が使用されます:
```c #define IO_WAITID_CANCEL_FLAG BIT(31) #define IO_WAITID_REF_MASK GENMASK(30, 0) ```
__io_waitid_cancel()関数はリクエストを取消済みとしてマークし、その後->refsの低位ビットを増分して完了権限を取得します。しかし、他のパスがそのリクエストを所有している場合でも、取り消しがfalseを返すにもかかわらず増分処理が行われてしまいます。このため、リクエストは依然として取消操作から検出可能であり、繰り返しの失敗した試行によって31ビットの参照フィールドがゼロにラップアラウンド(オーバーフロー)する可能性があります。その後、別の取消操作がこのリクエストの権限を主張し、2回目に完了処理を実行してしまうことがあります。
この問題を解決するため、取消フラグの設定時にatomic_fetch_or()を使用し、古いフラグ値を確認するようにしました。これにより、最初の取消試行は既存の所有権増分処理へ継続され、ウェイクアップおよび発行者間のハンドオフセマンティクスが保持されます。その後の試行では取消フラグを検知し、参照フィールドを増分せずに即座に返却します。
この修正により、繰り返しの失敗した取消試行を冪等(idempotent)にしつつ、最初の取消時の状態遷移は変更しないようにしています。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.