From: sashiko-bot@kernel.org
To: "Daniel Thompson" <daniel@riscstar.com>
Cc: bpf@vger.kernel.org
Subject: Re: [PATCH] net: stmmac: Avoid freeing and re-requesting IRQ during XDP set prog
Date: Mon, 06 Jul 2026 16:37:55 +0000 [thread overview]
Message-ID: <20260706163756.6B9F31F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260706-tc956x-stmmac-no_irq_teardown-v1-1-df009d0272bf@riscstar.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
New issues:
- [High] Removing `stmmac_disable_dma_irq()` during XDP open leaves DMA interrupts unmasked before NAPI is enabled, leading to lost wakeups and potential interrupt storms.
Pre-existing issues:
- [Critical] Concurrent `ndo_xdp_xmit` access during XDP reconfiguration causes UAF of DMA descriptors.
- [High] The return value of `stmmac_xdp_open()` is ignored in `stmmac_xdp_setup_prog()`, leading to a silent network outage if reopening the device fails.
--
commit 28a5a0b2fab7c42eb59936b760afc9e0ec09c6ef
Author: Daniel Thompson <daniel@riscstar.com>
net: stmmac: Avoid freeing and re-requesting IRQ during XDP set prog
This commit removes the implicit IRQ synchronization by omitting calls to
stmmac_free_irq() and stmmac_request_irq() during XDP program setup. It
instead explicitly disables DMA interrupts and synchronizes the IRQ handler
to prevent tearing down and restarting IRQ threads, which disrupts TSN
system tuning.
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> index 2a0d7eff88d3f..acd145f1f3069 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
[ ... ]
> @@ -7108,8 +7152,9 @@ void stmmac_xdp_release(struct net_device *dev)
> for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
> hrtimer_cancel(&priv->dma_conf.tx_queue[chan].txtimer);
>
> - /* Free the IRQ lines */
> - stmmac_free_irq(dev, REQ_IRQ_ERR_ALL, 0);
> + /* Silence DMA interrupts */
> + stmmac_disable_all_dma_irq(priv);
> + stmmac_synchronize_irq(dev);
>
> /* Stop TX/RX DMA channels */
> stmmac_stop_all_dma(priv);
[Severity: Critical]
This is a pre-existing issue, but does freeing the DMA descriptor rings
shortly after this point (via free_dma_desc_resources) cause a
use-after-free if ndo_xdp_xmit runs concurrently?
While stmmac_xdp_release() calls netif_tx_disable(), this does not stop
stmmac_xdp_xmit() from executing. If an XDP redirect occurs exactly while
the program is being detached, could stmmac_xdp_xmit() proceed and access
the freed tx_q->dma_tx array? It appears stmmac_xdp_xmit() only checks
STMMAC_DOWN, which is not set during XDP reconfiguration.
[ ... ]
> @@ -7156,10 +7201,8 @@ int stmmac_xdp_open(struct net_device *dev)
> stmmac_reset_queues_param(priv);
>
> /* DMA CSR Channel configuration */
> - for (chan = 0; chan < dma_csr_ch; chan++) {
> + for (chan = 0; chan < dma_csr_ch; chan++)
> stmmac_init_chan(priv, priv->ioaddr, priv->plat->dma_cfg, chan);
> - stmmac_disable_dma_irq(priv, priv->ioaddr, chan, 1, 1);
> - }
>
> /* Adjust Split header */
> sph_en = (priv->hw->rx_csum > 0) && priv->sph_active;
[Severity: High]
When stmmac_disable_dma_irq() is removed here, stmmac_init_chan() still
unmasks interrupts at the hardware level. Does this leave the DMA interrupts
unmasked before NAPI is enabled?
Since the OS IRQ is now permanently active (not freed during release), could
a packet arriving right after stmmac_start_all_dma() fire an interrupt
before stmmac_enable_all_queues() has run? It looks like this might cause
the interrupt service routine's call to napi_schedule_prep() to fail,
leading to a lost wakeup or an interrupt storm.
[ ... ]
[Severity: High]
This is a pre-existing issue, but I noticed that in stmmac_xdp_setup_prog()
in drivers/net/ethernet/stmicro/stmmac/stmmac_xdp.c, the return value of
stmmac_xdp_open() is ignored:
drivers/net/ethernet/stmicro/stmmac/stmmac_xdp.c:stmmac_xdp_setup_prog() {
...
if (if_running && need_update)
stmmac_xdp_open(dev);
if (prog)
xdp_features_set_redirect_target(dev, false);
return 0;
}
If stmmac_xdp_open() fails (for example, due to a memory allocation failure
for DMA rings), it returns a negative error code. Does ignoring this error
mask the initialization failure and leave the interface functionally down,
potentially leading to a silent network outage?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260706-tc956x-stmmac-no_irq_teardown-v1-1-df009d0272bf@riscstar.com?part=1
prev parent reply other threads:[~2026-07-06 16:37 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-06 16:17 [PATCH] net: stmmac: Avoid freeing and re-requesting IRQ during XDP set prog Daniel Thompson
2026-07-06 16:37 ` sashiko-bot [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260706163756.6B9F31F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@riscstar.com \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox