generic: mvswitch: add detach callback
authorjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Thu, 7 Feb 2013 15:18:34 +0000 (15:18 +0000)
committerjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Thu, 7 Feb 2013 15:18:34 +0000 (15:18 +0000)
Use the detach callback to disable packet mangling
to avoid possible NULL pointer dereference.

Compile tested only.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@35512 3c298f89-4303-0410-b956-a3cf2f4a3e73

target/linux/generic/files/drivers/net/phy/mvswitch.c

index d754951..af73ec2 100644 (file)
@@ -348,16 +348,26 @@ mvswitch_config_aneg(struct phy_device *phydev)
 }
 
 static void
-mvswitch_remove(struct phy_device *pdev)
+mvswitch_detach(struct phy_device *pdev)
 {
        struct mvswitch_priv *priv = to_mvsw(pdev);
        struct net_device *dev = pdev->attached_dev;
 
+       if (!dev)
+               return;
+
        dev->phy_ptr = NULL;
        dev->eth_mangle_rx = NULL;
        dev->eth_mangle_tx = NULL;
        dev->features = priv->orig_features;
        dev->priv_flags &= ~IFF_NO_IP_ALIGN;
+}
+
+static void
+mvswitch_remove(struct phy_device *pdev)
+{
+       struct mvswitch_priv *priv = to_mvsw(pdev);
+
        kfree(priv);
 }
 
@@ -399,6 +409,7 @@ static struct phy_driver mvswitch_driver = {
        .features       = PHY_BASIC_FEATURES,
        .probe          = &mvswitch_probe,
        .remove         = &mvswitch_remove,
+       .detach         = &mvswitch_detach,
        .config_init    = &mvswitch_config_init,
        .config_aneg    = &mvswitch_config_aneg,
        .read_status    = &mvswitch_read_status,