CVE-2026-64525 in Linux情報

要約

〜によって VulDB • 2026年07月25日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

xfrm: policy_bydst の RCU同期を per-netns .exit から .pre_exit へ移動する

include/net/net_namespace.h にある struct pernet_operations のドキュメント文字列は、.exit ハンドラ内でブロッキング型RCUプリミティブを使用しないよう明示的に警告しています:

ブロッキング型 RCU プリミティブ(例えば synchronize_rcu()) を使用する exit メソッドは、exit_batch 経由で実装すべきです。 [...]
可能であれば、synchronize_rcu() は避けてください。

pre_exit() と exit() の組み合わせを使用できます。これは、 その2つの呼び出しの間に synchronize_rcu() が保証されるためです。

xfrm_policy_fini() はこれを違反しています:この関数は policy_bydst ハッシュテーブルを解放する前に synchronize_rcu() を呼び出します(これにより、解放時にRCUリーダーが走査中になることはありません)。しかし、これは xfrm_net_ops.exit から実行されます(名前空間ごとに1回)ため、N個の名前空間に対する cleanup_net() は、シリアルに N 回の完全な RCU グレース期間を要することになります。

文書化された pre_exit/exit の分割を使用します。policyのフラッシュ処理と、それが依存するワークキューの排水処理を新しい .pre_exit ハンドラへ移動します。その後 xfrm_policy_fini() は .exit で実行され、cleanup_net() が2つのフェーズ間で保証する synchronize_rcu_expedited() 後にハッシュテーブルを解放します。これにより、バッチごとに O(N) の RCU グレース期間ではなく O(1) を提供します。

Linux 6.18において、~13回/秒の持続的な unshare(CLONE_NEWNET) ワークロードを実行した環境で確認されました:cleanup_net() と netns_wq rescuer kthread はどちらも xfrm_policy_fini()'s synchronize_rcu() で停止し、クリーンアップキューには >30万個の struct net が蓄積され、256-CPUホスト上で /proc/meminfo の Percpu 値は130GB以上まで上昇し、memcg OOMが発生しました。setup_net と __put_net のカウント数は均衡しており、参照カウンタリークではないことが確認されています。

VulDB is the best source for vulnerability data and more expert information about this specific topic.

責任者

Linux

予約する

2026年07月19日

モデレーション

承諾済み

エントリ

VDB-383049

EPSS

0.00156

アクティビティ

非常低い

ソース

Do you need the next level of professionalism?

Upgrade your account now!