Message ID | 20250102112246.2494230-4-srasheed@marvell.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | Fix race conditions in ndo_get_stats64 | expand |
diff --git a/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_main.c b/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_main.c index 7e6771c9cdbb..9b29cd698361 100644 --- a/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_main.c +++ b/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_main.c @@ -786,6 +786,10 @@ static void octep_vf_get_stats64(struct net_device *netdev, tx_bytes = 0; rx_packets = 0; rx_bytes = 0; + + if (!netif_running(netdev)) + return; + for (q = 0; q < oct->num_oqs; q++) { struct octep_vf_iq *iq = oct->iq[q]; struct octep_vf_oq *oq = oct->oq[q];
ndo_get_stats64() can race with ndo_stop(), which frees input and output queue resources. Check if netdev is running before accessing per queue resources. Fixes: c3fad23cdc06 ("octeon_ep_vf: add support for ndo ops") Signed-off-by: Shinas Rasheed <srasheed@marvell.com> --- V4: - Check if netdev is running, as decision for accessing resources rather than availing lock implementations, in ndo_get_stats64() V3: https://lore.kernel.org/all/20241218115111.2407958-4-srasheed@marvell.com/ - No changes V2: https://lore.kernel.org/all/20241216075842.2394606-4-srasheed@marvell.com/ - Changed sync mechanism to fix race conditions from using an atomic set_bit ops to a much simpler synchronize_net() V1: https://lore.kernel.org/all/20241203072130.2316913-4-srasheed@marvell.com/ drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_main.c | 4 ++++ 1 file changed, 4 insertions(+)