CVE-2026-98432として特定されたセキュリティ脆弱性は、LinuxカーネルのIPv4 TCPハンドシェイク要求の処理に影響を与えます。この問題は、カーネルがIPオプションデータの所有権と回収をどのように管理するかに焦点を当てています。標準的なTCPハンドシェイクの際、カーネルは初期接続状態を保存するために軽量な「リクエストソケット」を作成します。ハンドシェイクが完全な「子ソケット」へと進むにつれて、カーネルはリクエストソケットのIPオプション(`ireq_opt`)へのポインタを、オブジェクトを複製するのではなく、子ソケットのオプション(`inet_opt`)に転送します。この設計上の選択により、両方のソケットオブジェクトはオプションのための同じメモリ割り当てを共有することになります。

この脆弱性は、同じ接続に対して再送されたSYNパケットが到着した際のレースコンディションとして現れます。Linuxのネットワーキングは高度に並列化されているため、最初のCPUがハンドシェイクを完了している間に、2番目のCPUがこの再送されたSYNを処理する可能性があります。2番目のCPUは、SYN-ACKレスポンスを構築するためにRCU(Read-Copy Update)の読み取り側クリティカルセクションに入り、共有されたIPオプションを読み取ります。しかし、このウィンドウの間に子ソケットが破棄されると、カーネルの元のデストラクタは標準的な`kfree()`呼び出しを使用します。RCUを意識した回収とは異なり、`kfree()`はメモリを即座に再利用可能にします。これにより、2番目のCPUがすでに別のカーネルオブジェクトに再割り当てされている可能性のあるメモリから読み取りを継続するUse-After-Freeシナリオが発生し、クラッシュ、データ漏洩、またはリモートコード実行につながる可能性があります。

あるCPUがkfree_rcuを使用して共有IPオプションを解放する一方で、別のCPUがそれらにアクセスする2つのCPU間のレースコンディションを示す図。
並列CPU間のレースコンディションと、RCUを意識した回収がいかにUse-After-Freeエラーを防ぐかを示す技術図。www.penligent.ai

この図は、最初のCPUがソケットの破棄を処理している間に、2番目のCPUが共有IPオプションを読み取る特定のレースコンディションを説明しています。

アップストリームの修正は、コミット`e3f33b0a1d89`としてマージされ、即時の`kfree()`を`kfree_rcu()`に置き換えています。これにより、メモリの回収はRCUグレース期間が経過するまで遅延されることが保証され、オプションオブジェクトへの参照を現在保持しているすべてのCPUが操作を完了したことが保証されます。主な脆弱性はIPv4の子ソケットパスに影響しますが、リクエストソケットの移行(`net.ipv4.tcp_migrate_req=1`が有効な場合)にも関連する問題が存在します。その場合、カーネルはリクエストソケットをクローンし、古いリクエストとそのクローンは同じオプションを共有します。このパッチは、`inet_sock_destruct()`と`tcp_v4_reqsk_destructor()`の両方でRCUを意識した回収を強制することにより、標準的な子ソケットパスと移行パスの両方に対処しています。

Linuxカーネルの修正を棚卸し、アドバイザリを確認、更新、および検証するための運用ワークフローを示すフローチャート。
システム群全体でCVE-2026-98432の脆弱性を特定および修正するための運用ワークフロー。www.penligent.ai

この画像は、カーネルパッチの文脈で説明される修正手順の視覚的なワークフローを提供します。