| タイトル | LinuxのLinux Kernelにおける有効期限後のメモリの解放の欠如に関する脆弱性 |
|---|---|
| 概要 | Linuxカーネルにおいて、以下の脆弱性が修正されました。ice:マルチバッファフレームでのRxページリークの問題を修正しました。ice_put_rx_mbuf()関数は、現在のフレーム内の各バッファに対してice_put_rx_buf()を呼び出す処理を担当しています。この関数は、iceドライバでのマルチバッファXDPサポートを扱う一環として導入されました。動作は、XDPプログラム実行前にキャッシュされたフレーム内の断片総数に1を加えた数まで、first_descからバッファを繰り返し処理します。ハードウェアがサイズ0のディスクリプタを投稿すると、ice_put_rx_mbuf()内のロジックは破綻します。そのようなディスクリプタはスキップされ、ice_add_xdp_fragに断片として追加されません。バッファが断片にカウントされないため、ice_put_rx_mbuf()で反復処理されず、結果としてice_put_rx_buf()も呼ばれません。ice_put_rx_buf()を呼ばないため、ページの再利用や解放が試みられず、next_to_allocがインクリメントされないままリング内に古いページが残ります。ice_reuse_rx_page()はnext_to_allocが適切にインクリメントされており、必ずNULLページのバッファを指していることを前提としています。この関数はチェックしないため、next_to_allocバッファの上にページを上書きし、古いページの追跡を失います。このリークはマルチバッファフレームにのみ発生します。ice_put_rx_mbuf()は常に少なくとも1つのバッファを処理するため、シングルバッファフレームは正しく処理されます。ハードウェアが時折サイズ0のディスクリプタを渡す理由は明確ではありませんが、9K MTUの「ジャンボフレーム」で頻繁に発生することが確認されています。ice_put_rx_mbuf()の修正には、first_descからnext_to_cleanまでの全バッファに対してice_put_rx_buf()を呼び出す必要があります。同じ目的でi40eにある類似関数のロジックを利用し、ice_get_pgcnts()でも同様のロジックを使用します。断片数だけを反復する代わりに、現在のフレームのすぐ後ろにあるnext_to_clean要素に達するまでループで処理します。i40eとは異なり、ice_put_rx_mbuf()はフレーム末尾の最後のバッファにice_put_rx_buf()を呼び出し、パケットの終端を示します。非線形(マルチバッファ)フレームの場合、pagecnt_biasの調整に注意が必要です。XDPプログラムがフレーム末尾の断片を解放する場合、その断片のページはすでに解放済みです。pagecnt_biasの更新は最初のディスクリプタとXDPプログラム実行後も残っている断片に限定されます。共有情報は断片バッファのみにアクセスし、キャッシュミスを大幅に回避します。xdp_xmit値はXDPプログラムが実行された場合のみ、パケット毎に1回だけ更新すれば十分です。ice_put_rx_mbuf()からxdp_xmitポインタ引数を削除し、代わりにice_clean_rx_irq()内で直接設定します。これにより引数の伝播や各フレーム内バッファ毎のビット単位のOR操作が不要になります。ntcローカル変数のインクリメントを移動し、ice_get_pgcnts()やice_put_rx_mbuf()の全呼び出しの*前に*更新するようにしました。ループロジックは現在のフレーム直後の要素のインデックスを必要とするためです。パケット識別にインデックスポインタをリング内で使用することで、rx_ring内の断片数の追跡やキャッシュは不要になりました。 |
| 想定される影響 | 当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。 また、当該ソフトウェアが扱う情報について、書き換えは発生しません。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 |
| 対策 | リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 |
| 公表日 | 2025年10月4日0:00 |
| 登録日 | 2026年1月29日16:00 |
| 最終更新日 | 2026年1月29日16:00 |
| CVSS3.0 : 警告 | |
| スコア | 5.5 |
|---|---|
| ベクター | CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
| Linux |
| Linux Kernel 6.12.14 以上 6.12.49 未満 |
| Linux Kernel 6.13.3 以上 6.14 未満 |
| Linux Kernel 6.14 |
| Linux Kernel 6.14.1 以上 6.16.9 未満 |
| Linux Kernel 6.17 |
| Linux Kernel 6.6.78 以上 6.7 未満 |
| No | 変更内容 | 変更日 |
|---|---|---|
| 1 | [2026年01月29日] 掲載 |
2026年1月29日16:00 |