CVE-2025-38100 in Linux
要約
〜によって VulDB • 2026年06月23日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
x86/iopl: TIF_IO_BITMAP の不整合を解消する
io_bitmap_exit() は、タスクの終了時または fork 処理が失敗した場合に exit_thread() から呼び出されます。後者の場合、exit_thread() は fork() 中に割り当てられたリソースの後始末を行います。
io_bitmap_exit() は task_update_io_bitmap() を呼び出し、これは最終的に tss_update_io_bitmap() に至ります。tss_update_io_bitmap() は現在のタスクに対して動作します。もし current が TIF_IO_BITMAP フラグを設定しているがビットマップがインストールされていない場合、tss_update_io_bitmap() は NULL ポインタ参照によりクラッシュします。
この問題を引き起こす要因は2つあります。
1) io_bitmap_exit() は、後始末対象のタスクが現在のタスクではない場合に task_update_io_bitmap() を呼び出してはいけません。これは fork 処理失敗後のクリーンアップであることを明確に示しています。
2) タスクにおいて、TIF_IO_BITMAP が設定されているにもかかわらず、ビットマップがインストールされておらず、かつ IOPL エミュレーションレベル3も有効になっていない状態であってはなりません。
この状況は、IO bitmap ポインタがクリアされる一方でスレッドフラグがコピーされるため、TIF_IO_BITMAP フラグを設定しているユーザー空間スレッドのコンテキスト内でカーネルスレッドが作成された場合に発生します。
fork 処理失敗の場合とは異なり、これは影響を持ちません。なぜなら、IO ワーカーを含むカーネルスレッドは決してユーザー空間に戻らず、したがって tss_update_io_bitmap() を呼び出すことがないためです。
これを解消するために、欠落していたクリーンアップとチェックを追加します。
1) 後始末対象のタスクが現在のタスクではない場合、io_bitmap_exit() が task_update_io_bitmap() を呼び出さないように防止する。
2) copy_thread() において TIF_IO_BITMAP フラグを無条件にクリアする。ユーザー空間での fork の場合は、io_bitmap_share() で IO bitmap が継承される際に後から設定されます。
念のため、tss_update_io_bitmap() に警告を追加し、このコードが不整合な状態で呼び出された場合を検知できるようにします。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.