* Re: [PATCH net 1/2] net: cpsw: unregister secondary netdev on probe failure
@ 2026-10-04 14:10 netdev-bot+sashiko
0 siblings, 0 replies; 2+ messages in thread
From: netdev-bot+sashiko @ 2026-10-04 14:10 UTC (permalink / raw)
To: kmehltretter
Cc: netdev, s-vadapalli, rogerq, andrew+netdev, davem, edumazet,
kuba, pabeni, j-keerthy, haokexin, alex, arnd, linux-omap,
linux-kernel, stable
Thank you for your contribution! Sashiko AI review found 1 potential
issue(s) to consider.
Critical: 0 · High: 1 · Medium: 0 · Low: 0
If you believe none of the issues are legitimate, please reply to each
issue of Medium severity or higher and explain why the AI is wrong.
If any of them are legitimate and you plan to respin, please let patchwork
know by including "pw-bot: cr" as a separate line at the end of your reply
(one such reply per series is enough).
- [High] In this patch, the cpsw_probe() error label
clean_unregister_netdev_ret in drivers/net/ethernet/ti/cpsw.c now…
--
net: cpsw: unregister secondary netdev on probe failure
This patch records whether cpsw_probe() registered the secondary
dual-EMAC netdev. If it did, the clean_unregister_netdev_ret error path
now unregisters it before the primary netdev. This avoids the reg_state
BUG_ON in free_netdev() when devres frees a netdev that is still
registered after a late IRQ request failure.
> diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
> index aa3531e844e87..4fc59f9f23fcb 100644
> --- a/drivers/net/ethernet/ti/cpsw.c
> +++ b/drivers/net/ethernet/ti/cpsw.c
[ ... ]
> @@ -1764,6 +1766,8 @@ static int cpsw_probe(struct platform_device *pdev)
> return 0;
>
> clean_unregister_netdev_ret:
> + if (secondary_registered)
> + unregister_netdev(cpsw->slaves[1].ndev);
> unregister_netdev(ndev);
[Severity: High]
Can rx_mode_work still be pending on either netdev when devres frees it?
Both netdevs are registered before the devm_request_irq() calls, so an
interface can be brought up during that window. Bringing it up, or
changing its address lists, reaches cpsw_ndo_set_rx_mode(), which does:
schedule_work(&priv->rx_mode_work);
cpsw_ndo_stop() does not cancel this work.
cpsw_remove() follows each unregister with a disable:
priv = netdev_priv(ndev);
unregister_netdev(ndev);
disable_work_sync(&priv->rx_mode_work);
This error path does not. After probe returns the error, devres calls
free_netdev() on the devm-allocated netdevs. A queued or rtnl-blocked
cpsw_ndo_set_rx_mode_work() would then dereference the freed priv,
priv->cpsw and priv->ndev. The workqueue core would also touch the freed
work_struct.
The primary netdev already had this gap. For the secondary netdev, the
free_netdev() BUG_ON used to fire first. This patch removes that BUG_ON,
so the use-after-free on the secondary netdev can now be reached.
The next patch in the series, "net: cpsw: cancel RX mode work on probe
failure", appears to fix this. It adds disable_work_sync() after both
unregister_netdev() calls here, which matches cpsw_remove(). Its commit
message quotes a KASAN report of "slab-use-after-free in
cpsw_ndo_set_rx_mode_work".
Could that change be folded into this patch, so the two are not applied
separately?
--
Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/cover.1791035789.git.kmehltretter%40gmail.com
^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH net 1/2] net: cpsw: unregister secondary netdev on probe failure
2026-10-03 14:09 [PATCH net 0/2] net: cpsw: fix failed-probe cleanup Karl Mehltretter
@ 2026-10-03 14:09 ` Karl Mehltretter
0 siblings, 0 replies; 2+ messages in thread
From: Karl Mehltretter @ 2026-10-03 14:09 UTC (permalink / raw)
To: netdev
Cc: Karl Mehltretter, Siddharth Vadapalli, Roger Quadros,
Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Keerthy, Kevin Hao, Alexander Sverdlin,
Arnd Bergmann, linux-omap, linux-kernel, stable
The legacy CPSW driver registers both netdevs in dual-EMAC mode before
requesting its IRQs. If a later IRQ request fails, the probe error path
unregisters only the primary netdev. Driver-core devres cleanup then calls
free_netdev() for the still-registered secondary netdev, triggering the
reg_state BUG_ON.
Track successful secondary registration and unregister that netdev before
the primary on this error path. The pointer cannot indicate registration:
cpsw_probe_dual_emac() sets cpsw->slaves[1].ndev before it calls
register_netdev().
Reproduced with QEMU fault injection by forcing the TX IRQ request to fail
with -EBUSY in dual-EMAC mode; real hardware was not tested.
Fixes: 070f9c658a59 ("net: ethernet: ti: cpsw: Push the request_irq function to the end of probe")
Cc: stable@vger.kernel.org
Assisted-by: LLM
Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
---
drivers/net/ethernet/ti/cpsw.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index aa3531e844e8..4fc59f9f23fc 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -1550,6 +1550,7 @@ static int cpsw_probe(struct platform_device *pdev)
struct gpio_descs *mode;
const struct soc_device_attribute *soc;
struct cpsw_common *cpsw;
+ bool secondary_registered = false;
int ret = 0, ch;
int irq;
@@ -1717,6 +1718,7 @@ static int cpsw_probe(struct platform_device *pdev)
cpsw_err(priv, probe, "error probe slave 2 emac interface\n");
goto clean_unregister_netdev_ret;
}
+ secondary_registered = true;
}
/* Grab RX and TX IRQs. Note that we also have RX_THRESHOLD and
@@ -1764,6 +1766,8 @@ static int cpsw_probe(struct platform_device *pdev)
return 0;
clean_unregister_netdev_ret:
+ if (secondary_registered)
+ unregister_netdev(cpsw->slaves[1].ndev);
unregister_netdev(ndev);
clean_cpts:
cpts_release(cpsw->cpts);
--
2.53.0
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-10-04 14:10 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-04 14:10 [PATCH net 1/2] net: cpsw: unregister secondary netdev on probe failure netdev-bot+sashiko
-- strict thread matches above, loose matches on Subject: below --
2026-10-03 14:09 [PATCH net 0/2] net: cpsw: fix failed-probe cleanup Karl Mehltretter
2026-10-03 14:09 ` [PATCH net 1/2] net: cpsw: unregister secondary netdev on probe failure Karl Mehltretter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®