[PATCH] net: dsa: properly disconnect the slave PHYs

From: John Crispin
Date: Tue Oct 18 2016 - 08:13:11 EST


The shutdown code only stopped the PHYs but does not diconnect them
properly. This could lead to null pointer deref related kernel oopses
during reboot. Fix this by calling phy_disconnect() after the PHYs are
stopped.

Signed-off-by: John Crispin <john@xxxxxxxxxxx>
---
net/dsa/slave.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index 68714a5..725d9f7 100644
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
@@ -154,8 +154,10 @@ static int dsa_slave_close(struct net_device *dev)
struct net_device *master = p->parent->dst->master_netdev;
struct dsa_switch *ds = p->parent;

- if (p->phy)
+ if (p->phy) {
phy_stop(p->phy);
+ phy_disconnect(p->phy);
+ }

dev_mc_unsync(master, dev);
dev_uc_unsync(master, dev);
--
1.7.10.4