CVE-2025-21682 in Linux
要約
〜によって VulDB • 2026年05月11日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
eth: bnxt: XDPクリア後に常に機能フラグを再計算し、NULLポインタ参照を修正
XDPがデタッチされた際に機能フラグを再計算します。
修正前: # ip li set dev eth0 xdp obj xdp_dummy.bpf.o sec xdp # ip li set dev eth0 xdp off # ethtool -k eth0 | grep gro rx-gro-hw: off [requested on]
修正後: # ip li set dev eth0 xdp obj xdp_dummy.bpf.o sec xdp # ip li set dev eth0 xdp off # ethtool -k eth0 | grep gro rx-gro-hw: on
HW-GROが自動的に再有効化されないという事実は、単なるわずかな不具合に過ぎません。真の問題は、機能フラグが別の再構成時に偶然 `netdev_update_features()` を呼び出すタイミングでランダムに復活してしまう点です。このドライバは、2つの項目を同時に再構成する処理を非常に堅牢に処理していません。
コミット 98ba1d931f61 ("bnxt_en: Fix RSS logic in __bnxt_reserve_rings()") 以降、有効なRxリング数が変更された場合のみRSSハッシュテーブルの再構成を行うようになりました。HW-GROが有効な場合、「有効な」リング数はユーザーに見える数の2倍になります。したがって、XDPオフ後にHW-GROの再有効化が「保留中」の不良状態にあり、リング数を / 2 で減らした場合、HW-GROのリング(2倍)と ethtool -L(/ 2)が互いに相殺し合う可能性があります。その結果、
if (old_rx_rings != bp->hw_resc.resv_rx_rings &&
という `__bnxt_reserve_rings()` 内の条件が false になります。 RSSマップが更新されず、以下のようなクラッシュが発生します。
BUG: kernel NULL pointer dereference, address: 0000000000000168 RIP: 0010:__bnxt_hwrm_vnic_set_rss+0x13a/0x1a0 bnxt_hwrm_vnic_rss_cfg_p5+0x47/0x180 __bnxt_setup_vnic_p5+0x58/0x110 bnxt_init_nic+0xb72/0xf50 __bnxt_open_nic+0x40d/0xab0 bnxt_open_nic+0x2b/0x60 ethtool_set_channels+0x18c/0x1d0
これは、解放されたリングにアクセスしようとした際に発生します。
この問題は、XDPサポートが追加された頃から存在しましたが、コミット 98ba1d931f61 ("bnxt_en: Fix RSS logic in __bnxt_reserve_rings()") より前では重大な問題を引き起こしていませんでした。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.