In the Linux kernel, the following vulnerability has been resolved:
eth: bnxt: always recalculate features after XDP clearing, fix null-deref
Recalculate features when XDP is detached.
Before: # 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]
After: # 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
The fact that HW-GRO doesn't get re-enabled automatically is just a minor annoyance. The real issue is that the features will randomly come back during another reconfiguration which just happens to invoke netdevupdatefeatures(). The driver doesn't handle reconfiguring two things at a time very robustly.
Starting with commit 98ba1d931f61 ("bnxten: Fix RSS logic in _bnxtreserverings()") we only reconfigure the RSS hash table if the "effective" number of Rx rings has changed. If HW-GRO is enabled "effective" number of rings is 2x what user sees. So if we are in the bad state, with HW-GRO re-enablement "pending" after XDP off, and we lower the rings by / 2 - the HW-GRO rings doing 2x and the ethtool -L doing / 2 may cancel each other out, and the:
if (oldrxrings != bp->hwresc.resvrx_rings &&
condition in _bnxtreserve_rings() will be false. The RSS map won't get updated, and we'll crash with:
BUG: kernel NULL pointer dereference, address: 0000000000000168 RIP: 0010:_bnxthwrmvnicsetrss+0x13a/0x1a0 bnxthwrmvnicrsscfgp5+0x47/0x180 _bnxtsetupvnicp5+0x58/0x110 bnxtinitnic+0xb72/0xf50 _bnxtopennic+0x40d/0xab0 bnxtopennic+0x2b/0x60 ethtoolset_channels+0x18c/0x1d0
As we try to access a freed ring.
The issue is present since XDP support was added, really, but prior to commit 98ba1d931f61 ("bnxten: Fix RSS logic in _bnxtreserverings()") it wasn't causing major issues.
[
{
"id": "CVE-2025-21682-1690f319",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f0aa6a37a3dbb40b272df5fc6db93c114688adcd",
"digest": {
"line_hashes": [
"331822575848222141031163858661384729009",
"195202145743037447398611108111677889866",
"223187465459004964521987317667633213211",
"153071736596332771127899178965625105474",
"140582542248885426813842007249672578282",
"123238455077530198687290385989540922502",
"93759092387677900470820159670085645629",
"248842490601689295801918697608255702075",
"53932007621590165814166510102639499664",
"269788077035240044432975134829434540000",
"72547307458737377365555149095650194184",
"29963735431270436171426105838866199724",
"125206456389197744721330918055107506647",
"229439541934651990180760475236152342840",
"89820072803126938967875065729550444992",
"87890568262423024036853260763205359297",
"130474221998859483456939566248050876165",
"309809759539141387834312932808355471137",
"178093056287206858540520443689453075317"
],
"threshold": 0.9
},
"target": {
"file": "drivers/net/ethernet/broadcom/bnxt/bnxt.c"
},
"deprecated": false,
"signature_type": "Line",
"signature_version": "v1"
},
{
"id": "CVE-2025-21682-23b6e5e0",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@08831a894d18abfaabb5bbde7c2069a7fb41dd93",
"digest": {
"line_hashes": [
"176700575226621180102870903384930816365",
"305068370290339239639608945846466412315",
"208990121203402814618549783601889756535",
"268119085286743459720897046972764653183",
"207740746575137017821170183725085767960",
"171569062796703877993814112965108654303",
"247548739340784147556549919307647905260",
"108465273231489548864620481129220643839",
"146180638148522521942313021909222878356",
"292995718487197016522588393539522735076",
"48255000238263172778130475993016772579"
],
"threshold": 0.9
},
"target": {
"file": "drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c"
},
"deprecated": false,
"signature_type": "Line",
"signature_version": "v1"
},
{
"id": "CVE-2025-21682-38dc3b0e",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f0aa6a37a3dbb40b272df5fc6db93c114688adcd",
"digest": {
"line_hashes": [
"176700575226621180102870903384930816365",
"305068370290339239639608945846466412315",
"208990121203402814618549783601889756535",
"268119085286743459720897046972764653183",
"207740746575137017821170183725085767960",
"171569062796703877993814112965108654303",
"247548739340784147556549919307647905260",
"108465273231489548864620481129220643839",
"146180638148522521942313021909222878356",
"292995718487197016522588393539522735076",
"48255000238263172778130475993016772579"
],
"threshold": 0.9
},
"target": {
"file": "drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c"
},
"deprecated": false,
"signature_type": "Line",
"signature_version": "v1"
},
{
"id": "CVE-2025-21682-856c13e1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@08831a894d18abfaabb5bbde7c2069a7fb41dd93",
"digest": {
"line_hashes": [
"331822575848222141031163858661384729009",
"195202145743037447398611108111677889866",
"223187465459004964521987317667633213211",
"153071736596332771127899178965625105474",
"140582542248885426813842007249672578282",
"123238455077530198687290385989540922502",
"93759092387677900470820159670085645629",
"248842490601689295801918697608255702075",
"53932007621590165814166510102639499664",
"269788077035240044432975134829434540000",
"72547307458737377365555149095650194184",
"29963735431270436171426105838866199724",
"125206456389197744721330918055107506647",
"229439541934651990180760475236152342840",
"89820072803126938967875065729550444992",
"87890568262423024036853260763205359297",
"130474221998859483456939566248050876165",
"309809759539141387834312932808355471137",
"178093056287206858540520443689453075317"
],
"threshold": 0.9
},
"target": {
"file": "drivers/net/ethernet/broadcom/bnxt/bnxt.c"
},
"deprecated": false,
"signature_type": "Line",
"signature_version": "v1"
},
{
"id": "CVE-2025-21682-887a6432",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@08831a894d18abfaabb5bbde7c2069a7fb41dd93",
"digest": {
"length": 1607.0,
"function_hash": "305525965850163589923202570721137274661"
},
"target": {
"file": "drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c",
"function": "bnxt_xdp_set"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
},
{
"id": "CVE-2025-21682-889c0f80",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@08831a894d18abfaabb5bbde7c2069a7fb41dd93",
"digest": {
"length": 869.0,
"function_hash": "43600969798142739945076535811967446892"
},
"target": {
"file": "drivers/net/ethernet/broadcom/bnxt/bnxt.c",
"function": "bnxt_set_rx_skb_mode"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
},
{
"id": "CVE-2025-21682-95c1c35b",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@08831a894d18abfaabb5bbde7c2069a7fb41dd93",
"digest": {
"line_hashes": [
"148819416362180604245055429985419435990",
"275124874221238208391408455774353117529",
"251284519472757740016238432558460420302",
"203136604018054187400465067308593831176"
],
"threshold": 0.9
},
"target": {
"file": "drivers/net/ethernet/broadcom/bnxt/bnxt.h"
},
"deprecated": false,
"signature_type": "Line",
"signature_version": "v1"
},
{
"id": "CVE-2025-21682-d21ee295",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f0aa6a37a3dbb40b272df5fc6db93c114688adcd",
"digest": {
"length": 1607.0,
"function_hash": "305525965850163589923202570721137274661"
},
"target": {
"file": "drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c",
"function": "bnxt_xdp_set"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
},
{
"id": "CVE-2025-21682-d719ae4f",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f0aa6a37a3dbb40b272df5fc6db93c114688adcd",
"digest": {
"line_hashes": [
"84916112682008139055703039375432918913",
"275124874221238208391408455774353117529",
"251284519472757740016238432558460420302",
"203136604018054187400465067308593831176"
],
"threshold": 0.9
},
"target": {
"file": "drivers/net/ethernet/broadcom/bnxt/bnxt.h"
},
"deprecated": false,
"signature_type": "Line",
"signature_version": "v1"
},
{
"id": "CVE-2025-21682-f050fc4d",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f0aa6a37a3dbb40b272df5fc6db93c114688adcd",
"digest": {
"length": 869.0,
"function_hash": "43600969798142739945076535811967446892"
},
"target": {
"file": "drivers/net/ethernet/broadcom/bnxt/bnxt.c",
"function": "bnxt_set_rx_skb_mode"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
}
]