Thread (12 messages) flat view 12 messages, 4 authors, 2026-01-12

RE: [Intel-wired-lan] [PATCH 3/5] idpf: skip getting RX flow rules if vport is NULL during HW reset

From: Loktionov, Aleksandr <hidden>
Date: 2026-01-12 09:58:52
Also in: intel-wired-lan, lkml

quoted hunk ↗ jump to hunk
-----Original Message-----
From: Intel-wired-lan <redacted> On Behalf
Of Li Li via Intel-wired-lan
Sent: Wednesday, January 7, 2026 2:05 AM
To: Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Kitszel,
Przemyslaw [off-list ref]; David S. Miller
[off-list ref]; Jakub Kicinski [off-list ref]; Eric Dumazet
[off-list ref]; intel-wired-lan@lists.osuosl.org
Cc: netdev@vger.kernel.org; linux-kernel@vger.kernel.org; David
Decotigny [off-list ref]; Singhai, Anjali
[off-list ref]; Samudrala, Sridhar
[off-list ref]; Brian Vazquez [off-list ref]; Li
Li [off-list ref]; Tantilov, Emil S [off-list ref]
Subject: [Intel-wired-lan] [PATCH 3/5] idpf: skip getting RX flow
rules if vport is NULL during HW reset

When an idpf HW reset is triggered, it clears the vport but does not
clear the netdev held by vport:

    // In idpf_vport_dealloc() called by idpf_init_hard_reset(),
    // idpf_init_hard_reset() sets IDPF_HR_RESET_IN_PROG, so
    // idpf_decfg_netdev() doesn't get called.
    if (!test_bit(IDPF_HR_RESET_IN_PROG, adapter->flags))
        idpf_decfg_netdev(vport);
    // idpf_decfg_netdev() would clear netdev but it isn't called:
    unregister_netdev(vport->netdev);
    free_netdev(vport->netdev);
    vport->netdev = NULL;
    // Later in idpf_init_hard_reset(), the vport is cleared:
    kfree(adapter->vports);
    adapter->vports = NULL;

During an idpf HW reset, when userspace gets RX flow classification
rules of the netdev, the vport associated with the netdev is NULL, and
so a kernel panic would happen:

[ 1466.308592] BUG: kernel NULL pointer dereference, address:
0000000000000032 ...
[ 1466.356222] RIP: 0010:idpf_get_rxnfc+0x3b/0x70

This can be reproduced reliably by injecting a TX timeout to cause an
idpf HW reset, and injecting a virtchnl error to cause the HW reset to
fail and retry, while running "ethtool -n" in userspace.

With this patch applied, we see the following error but no kernel
panics anymore:

[  312.476576] idpf 0000:05:00.0 eth1: failed to get rules due to no
vport in netdev Cannot get RX rings: Bad address
rxclass: Cannot get RX class rule count: Bad address RX classification
rule retrieval failed

Signed-off-by: Li Li <redacted>
---
 drivers/net/ethernet/intel/idpf/idpf_ethtool.c | 7 +++++++
 1 file changed, 7 insertions(+)
diff --git a/drivers/net/ethernet/intel/idpf/idpf_ethtool.c
b/drivers/net/ethernet/intel/idpf/idpf_ethtool.c
index 6a4b630b786c2..c71af85408a29 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_ethtool.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_ethtool.c
@@ -45,6 +44,11 @@ static int idpf_get_rxnfc(struct net_device
*netdev, struct ethtool_rxnfc *cmd,

 	idpf_vport_ctrl_lock(netdev);
 	vport = idpf_netdev_to_vport(netdev);
+	if (!vport) {
+		netdev_err(netdev, "failed to get rules due to no vport
in netdev\n");
+		err = -EFAULT;
+		goto unlock;
+	}
 	vport_config = np->adapter->vport_config[np->vport_idx];
 	user_config = &vport_config->user_config;
@@ -85,6 +90,7 @@ static int idpf_get_rxnfc(struct net_device *netdev,
struct ethtool_rxnfc *cmd,
 		break;
 	}

+unlock:
 	idpf_vport_ctrl_unlock(netdev);

 	return err;
--
2.52.0.351.gbe84eed79e-goog
Reviewed-by: Aleksandr Loktionov <redacted>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help