From 852ed7a234bb31ceaf629698c1f7f1378f38a67a Mon Sep 17 00:00:00 2001
From: juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Thu, 7 Feb 2013 15:18:34 +0000
Subject: generic: mvswitch: add detach callback

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 | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

(limited to 'target')

diff --git a/target/linux/generic/files/drivers/net/phy/mvswitch.c b/target/linux/generic/files/drivers/net/phy/mvswitch.c
index d754951ac..af73ec22a 100644
--- a/target/linux/generic/files/drivers/net/phy/mvswitch.c
+++ b/target/linux/generic/files/drivers/net/phy/mvswitch.c
@@ -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,
-- 
cgit v1.2.3