diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2013-02-07 15:18:34 +0000 |
---|---|---|
committer | Gabor Juhos <juhosg@openwrt.org> | 2013-02-07 15:18:34 +0000 |
commit | c130a3feac577eb07943d2c3e5428ea5557aabcc (patch) | |
tree | 6c80aa9e319d532d450232046947cd141f78dc7d | |
parent | 4be8c22e7440e6b2d4d2673009f56ad30b401a16 (diff) | |
download | upstream-c130a3feac577eb07943d2c3e5428ea5557aabcc.tar.gz upstream-c130a3feac577eb07943d2c3e5428ea5557aabcc.tar.bz2 upstream-c130a3feac577eb07943d2c3e5428ea5557aabcc.zip |
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>
SVN-Revision: 35512
-rw-r--r-- | target/linux/generic/files/drivers/net/phy/mvswitch.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/mvswitch.c b/target/linux/generic/files/drivers/net/phy/mvswitch.c index d754951aca..af73ec22a0 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, |