From: netdev-bot+sashiko@kernel.org
To: kmehltretter@gmail.com
Cc: netdev@vger.kernel.org, s-vadapalli@ti.com, rogerq@kernel.org,
andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@kernel.org,
kuba@kernel.org, pabeni@redhat.com, j-keerthy@ti.com,
haokexin@gmail.com, alex@sverdlin.org, arnd@arndb.de,
linux-omap@vger.kernel.org, linux-kernel@vger.kernel.org,
stable@vger.kernel.org
Subject: Re: [PATCH net 1/2] net: cpsw: unregister secondary netdev on probe failure
Date: Sun, 04 Oct 2026 14:10:31 +0000 [thread overview]
Message-ID: <179112303157.434549.9729493516800136823@kernel.org> (raw)
In-Reply-To: =?utf-8?q?=3C2f459154f5bca89a07dc978c834e98198c08c331=2E1791035?= =?utf-8?q?789=2Egit=2Ekmehltretter=40gmail=2Ecom=3E?=
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
next reply other threads:[~2026-10-04 14:10 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-04 14:10 netdev-bot+sashiko [this message]
-- 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
2026-10-07 0:57 ` Jakub Kicinski
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=179112303157.434549.9729493516800136823@kernel.org \
--to=netdev-bot+sashiko@kernel.org \
--cc=alex@sverdlin.org \
--cc=andrew+netdev@lunn.ch \
--cc=arnd@arndb.de \
--cc=davem@davemloft.net \
--cc=edumazet@kernel.org \
--cc=haokexin@gmail.com \
--cc=j-keerthy@ti.com \
--cc=kmehltretter@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rogerq@kernel.org \
--cc=s-vadapalli@ti.com \
--cc=stable@vger.kernel.org \
/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
all inboxes | Powered by JetHome®