Patch "net: dsa: fix panic on shutdown if multi-chip tree failed to probe" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net: dsa: fix panic on shutdown if multi-chip tree failed to probe

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-dsa-fix-panic-on-shutdown-if-multi-chip-tree-fai.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 05f878b13f514facd1e4469892150abcbb1ed481
Author: Vladimir Oltean <vladimir.oltean@xxxxxxx>
Date:   Fri Mar 18 21:54:43 2022 +0200

    net: dsa: fix panic on shutdown if multi-chip tree failed to probe
    
    [ Upstream commit 8fd36358ce82382519b50b05f437493e1e00c4a9 ]
    
    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@xxxxxxx>
    Link: https://lore.kernel.org/r/20220318195443.275026-1-vladimir.oltean@xxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
index e7fa8ce41a4c..64a56db3de58 100644
--- a/net/dsa/dsa2.c
+++ b/net/dsa/dsa2.c
@@ -1631,6 +1631,10 @@ void dsa_switch_shutdown(struct dsa_switch *ds)
 	struct dsa_port *dp;
 
 	mutex_lock(&dsa2_mutex);
+
+	if (!ds->setup)
+		goto out;
+
 	rtnl_lock();
 
 	list_for_each_entry(dp, &ds->dst->ports, list) {
@@ -1665,6 +1669,7 @@ void dsa_switch_shutdown(struct dsa_switch *ds)
 	unregister_netdevice_many(&unregister_list);
 
 	rtnl_unlock();
+out:
 	mutex_unlock(&dsa2_mutex);
 }
 EXPORT_SYMBOL_GPL(dsa_switch_shutdown);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux