dsa: slave: Don't reference NULL pointer during phy_disconnect
authorAndrew Lunn <andrew@lunn.ch>
Fri, 11 Mar 2016 23:01:37 +0000 (00:01 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 14 Mar 2016 19:43:10 +0000 (15:43 -0400)
When the phy is disconnected, the parent pointer to the netdev it was
attached to is set to NULL. The code then tries to suspend the phy,
but dsa_slave_fixed_link_update needs the parent pointer to determine
which switch the phy is connected to. So it dereferenced a NULL
pointer. Check for this condition.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dsa/slave.c

index 27bf03d11670cd982b072bc02bf0331b0308e6b4..49056d90b17954d5adf4fca2fd3c8a766163e920 100644 (file)
@@ -896,11 +896,15 @@ static void dsa_slave_adjust_link(struct net_device *dev)
 static int dsa_slave_fixed_link_update(struct net_device *dev,
                                       struct fixed_phy_status *status)
 {
-       struct dsa_slave_priv *p = netdev_priv(dev);
-       struct dsa_switch *ds = p->parent;
+       struct dsa_slave_priv *p;
+       struct dsa_switch *ds;
 
-       if (ds->drv->fixed_link_update)
-               ds->drv->fixed_link_update(ds, p->port, status);
+       if (dev) {
+               p = netdev_priv(dev);
+               ds = p->parent;
+               if (ds->drv->fixed_link_update)
+                       ds->drv->fixed_link_update(ds, p->port, status);
+       }
 
        return 0;
 }