From c130a3feac577eb07943d2c3e5428ea5557aabcc Mon Sep 17 00:00:00 2001 From: Gabor Juhos Date: Thu, 7 Feb 2013 15:18:34 +0000 Subject: [PATCH] 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 SVN-Revision: 35512 --- .../linux/generic/files/drivers/net/phy/mvswitch.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/target/linux/generic/files/drivers/net/phy/mvswitch.c b/target/linux/generic/files/drivers/net/phy/mvswitch.c index d754951aca3..af73ec22a0d 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,