diff options
author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2013-02-07 15:18:34 +0000 |
---|---|---|
committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2013-02-07 15:18:34 +0000 |
commit | 852ed7a234bb31ceaf629698c1f7f1378f38a67a (patch) | |
tree | e652b02c08a6b8f3192a31ad77b102e3cde2ad5b | |
parent | 4a7ecbb10cd0559f540111e91c15710d767e2321 (diff) |
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
-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 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, |