CVE-2024-36937 in Linux情報

要約

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

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

xdp: flagsフィールドを使用してブロードキャストリダイレクトと単一ターゲットリダイレクトを明確に区別する

XDPを用いてパケットのリダイレクトを行う際、bpf_redirect_map()ヘルパー関数はstruct bpf_redirect_info内のリダイレクト先情報を設定します(__bpf_xdp_redirect_map()ヘルパー関数を使用)。その後、xdp_do_redirect()関数はXDPプログラムが返却した後にこの情報を読み取り、フレームを適切なリダイレクト先に渡します。

BPF_F_BROADCASTフラグを使用してマップ全体へのマルチキャストリダイレクトを行う場合、__bpf_xdp_redirect_map()はstruct bpf_redirect_info内の'map'ポインタを、ブロードキャスト先の宛先マップを指すように設定します。そしてxdp_do_redirect()はこのmapポインタの値に応じて、それがブロードキャストか単一ターゲットへのリダイレクトかを判断して対応します。しかし、もしxdp_do_redirect()が呼び出される前に宛先マップが破棄されていると、bpf_clear_redirect_map()によって他のXDPプログラムの実行停止を待たずにmapポインタがクリアされます(NULLに設定されます)。これにより、xdp_do_redirect()はリダイレクトが単一ターゲットへのものだと誤認しますが、そのターゲットポインタも実際にはNULLです(ブロードキャストリダイレクトには単一のターゲットが存在しないため)。結果として、dev_map_enqueue()に対してNULLポインタが渡されることでクラッシュが発生します。

この問題を修正するため、xdp_do_redirect()を変更し、struct bpf_redirect_info内の'flags'値におけるBPF_F_BROADCASTフラグの存在の有無に直接反応させることで、単一ターゲットリダイレクトとブロードキャストリダイレクトを明確に区別するようにしました。また、broadcastフラグが設定されている場合のみ'map'ポインタを読み取り、その間にクリアされていた場合は処理を中止します。これによりクラッシュを防ぎつつ、マップポインタ自体の原子性(cmpxchgベース)によるクリアリングは維持し、非ブロードキャスト時の高速パスに追加チェックを加えることなく対応しています。

If you want to get best quality of vulnerability data, you may have to visit VulDB.

予約する

2024年05月30日

モデレーション

承諾済み

エントリ

VDB-266686

EPSS

0.00225

アクティビティ

非常低い

ソース

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!