CVE-2025-21682 in Linux
Сводка
по VulDB • 30.05.2026
В ядре Linux устранена следующая уязвимость:
eth: bnxt: всегда пересчитывать флаги после очистки XDP, исправление null-deref
Пересчитывать флаги при отсоединении 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(). Драйвер не очень надежно обрабатывает одновременную переконфигурацию двух вещей.
Начиная с коммита 98ba1d931f61 ("bnxt_en: Fix RSS logic in __bnxt_reserve_rings()") мы переконфигурируем таблицу хэширования RSS только в том случае, если изменилось «эффективное» количество Rx-колец. Если HW-GRO включен, «эффективное» количество колец в 2 раза больше того, что видит пользователь. Таким образом, если мы находимся в плохом состоянии, с «отложенным» включением HW-GRO после выключения XDP, и мы уменьшаем количество колец в 2 раза (/ 2), то кольца HW-GRO, делающие умножение на 2 (2x), и ethtool -L, делающие деление на 2 (/ 2), могут компенсировать друг друга, и условие:
if (old_rx_rings != bp->hw_resc.resv_rx_rings &&
в __bnxt_reserve_rings() станет ложным. Карта 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.