[PATCH net-next v2 1/2] net/stmmac: Check for STMMAC_DOWN flag in all XDP paths

From: Jakub Raczynski

Date: Mon Jun 01 2026 - 12:40:57 EST


Currently STMMAC_DOWN flag is only set/cleared by stmmac_reset_subtask(),
to notify driver to stop processing of TX/RX frames. One of these processing
paths is for XDP, but it is only ever checked in stmmac_xdp_xmit(), which
leaves all other XDP paths vulnerable to processing data while interface is
restarting.

Make verification of STMMAC_DOWN flag consistent by applying check to all XDP
RX paths.

Co-developed-by: Chang-Sub Lee <cs0617.lee@xxxxxxxxxxx>
Signed-off-by: Chang-Sub Lee <cs0617.lee@xxxxxxxxxxx>
Signed-off-by: Jakub Raczynski <j.raczynski@xxxxxxxxxxx>
---
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 3591755ea30b..3a66f2842527 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -5267,6 +5267,9 @@ static int stmmac_xdp_xmit_back(struct stmmac_priv *priv,
if (unlikely(!xdpf))
return STMMAC_XDP_CONSUMED;

+ if (unlikely(test_bit(STMMAC_DOWN, &priv->state)))
+ return STMMAC_XDP_CONSUMED;
+
queue = stmmac_xdp_get_tx_queue(priv, cpu);
nq = netdev_get_tx_queue(priv->dev, queue);

@@ -5308,7 +5311,9 @@ static int __stmmac_xdp_run_prog(struct stmmac_priv *priv,
res = stmmac_xdp_xmit_back(priv, xdp);
break;
case XDP_REDIRECT:
- if (xdp_do_redirect(priv->dev, xdp, prog) < 0)
+ if (unlikely(test_bit(STMMAC_DOWN, &priv->state)))
+ res = STMMAC_XDP_CONSUMED;
+ else if (xdp_do_redirect(priv->dev, xdp, prog) < 0)
res = STMMAC_XDP_CONSUMED;
else
res = STMMAC_XDP_REDIRECT;
--
2.34.1