netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net] net: dsa: fix panic on shutdown if multi-chip tree failed to probe
@ 2022-03-18 19:54 Vladimir Oltean
  2022-03-22  5:40 ` patchwork-bot+netdevbpf
  0 siblings, 1 reply; 2+ messages in thread
From: Vladimir Oltean @ 2022-03-18 19:54 UTC (permalink / raw)
  To: netdev
  Cc: Paolo Abeni, Florian Fainelli, Andrew Lunn, Vivien Didelot,
	Vladimir Oltean, David S. Miller, Jakub Kicinski

DSA probing is atypical because a tree of devices must probe all at
once, so out of N switches which call dsa_tree_setup_routing_table()
during probe, for (N - 1) of them, "complete" will return false and they
will exit probing early. The Nth switch will set up the whole tree on
their behalf.

The implication is that for (N - 1) switches, the driver binds to the
device successfully, without doing anything. When the driver is bound,
the ->shutdown() method may run. But if the Nth switch has failed to
initialize the tree, there is nothing to do for the (N - 1) driver
instances, since the slave devices have not been created, etc. Moreover,
dsa_switch_shutdown() expects that the calling @ds has been in fact
initialized, so it jumps at dereferencing the various data structures,
which is incorrect.

Avoid the ensuing NULL pointer dereferences by simply checking whether
the Nth switch has previously set "ds->setup = true" for the switch
which is currently shutting down. The entire setup is serialized under
dsa2_mutex which we already hold.

Fixes: 0650bf52b31f ("net: dsa: be compatible with masters which unregister on shutdown")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
---
 net/dsa/dsa2.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
index 12b9bced4eb8..ca3f68ee4203 100644
--- a/net/dsa/dsa2.c
+++ b/net/dsa/dsa2.c
@@ -1782,6 +1782,10 @@ void dsa_switch_shutdown(struct dsa_switch *ds)
 	struct dsa_port *dp;
 
 	mutex_lock(&dsa2_mutex);
+
+	if (!ds->setup)
+		goto out;
+
 	rtnl_lock();
 
 	dsa_switch_for_each_user_port(dp, ds) {
@@ -1798,6 +1802,7 @@ void dsa_switch_shutdown(struct dsa_switch *ds)
 		dp->master->dsa_ptr = NULL;
 
 	rtnl_unlock();
+out:
 	mutex_unlock(&dsa2_mutex);
 }
 EXPORT_SYMBOL_GPL(dsa_switch_shutdown);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH net] net: dsa: fix panic on shutdown if multi-chip tree failed to probe
  2022-03-18 19:54 [PATCH net] net: dsa: fix panic on shutdown if multi-chip tree failed to probe Vladimir Oltean
@ 2022-03-22  5:40 ` patchwork-bot+netdevbpf
  0 siblings, 0 replies; 2+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-03-22  5:40 UTC (permalink / raw)
  To: Vladimir Oltean
  Cc: netdev, pabeni, f.fainelli, andrew, vivien.didelot, olteanv, davem, kuba

Hello:

This patch was applied to netdev/net.git (master)
by Jakub Kicinski <kuba@kernel.org>:

On Fri, 18 Mar 2022 21:54:43 +0200 you wrote:
> DSA probing is atypical because a tree of devices must probe all at
> once, so out of N switches which call dsa_tree_setup_routing_table()
> during probe, for (N - 1) of them, "complete" will return false and they
> will exit probing early. The Nth switch will set up the whole tree on
> their behalf.
> 
> The implication is that for (N - 1) switches, the driver binds to the
> device successfully, without doing anything. When the driver is bound,
> the ->shutdown() method may run. But if the Nth switch has failed to
> initialize the tree, there is nothing to do for the (N - 1) driver
> instances, since the slave devices have not been created, etc. Moreover,
> dsa_switch_shutdown() expects that the calling @ds has been in fact
> initialized, so it jumps at dereferencing the various data structures,
> which is incorrect.
> 
> [...]

Here is the summary with links:
  - [net] net: dsa: fix panic on shutdown if multi-chip tree failed to probe
    https://git.kernel.org/netdev/net/c/8fd36358ce82

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-03-22  5:40 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-18 19:54 [PATCH net] net: dsa: fix panic on shutdown if multi-chip tree failed to probe Vladimir Oltean
2022-03-22  5:40 ` patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).