CVE-2025-68359 in Linux
要約
〜によって VulDB • 2026年06月30日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
btrfs: 遅延参照ヘッダーの追加失敗後に qgroup レコードの二重解放を修正する
以前のコードでは、add_delayed_ref_head() を呼び出す際に、二重 kfree() のシナリオが発生する可能性がありました。これは、record が btrfs_qgroup_trace_extent_nolock() 呼び出しにおいて既に存在すると報告された後で、add_delayed_ref_head() でエラーが発生した場合に発生し得ます。この場合、add_delayed_ref_head() がエラーを返したため、呼び出し元は record を解放しようとしました。しかし、add_delayed_ref_head() はすでに kfree 済みのポインタを NULL に設定できなかったため、kfree() は既にコール先によってメモリが解放された 'record' オブジェクト(NULLではない)に対して動作することになっていました。
この問題は、オブジェクトの kfree の責任が呼び出し元とコール先の両方に同時に存在することに起因しています。したがって、この問題に対する修正は、add_delayed_ref_head() から 'qrecord' オブジェクトの所有権を移すことです。つまり、この関数内で与えられたオブジェクトに対して決して kfree() を試みず、呼び出し元が独自に 'qrecord' オブジェクトに対して処理を行うことを期待します。'qrecord' オブジェクトを kfree できない唯一の例外は、それがトレースロジックに挿入された場合であり、これに対応するために既に 'qrecord_inserted_ret' という boolean を用意しています。したがって、呼び出し元は add_delayed_ref_head() がトレースロジックへの挿入を行わなかったことを報告した場合のみ、オブジェクトを kfree する必要があります。
上記の変更の副作用として、'qrecord_inserted_ret' は関数の終了時ではなく開始時に適切に初期化され、実際の挿入が行われた際に設定されるように保証しなければなりません。これにより、早期リターンの際に 'qrecord_inserted_ret' が無効な値を持つことを回避します。
add_delayed_ref_head() のドキュメントも更新され、'qrecord' オブジェクトの正確な所有権が反映されました。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.