]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ieee802154: fix error handling in ieee802154fake_probe()
authorAlexey Khoroshilov <khoroshilov@ispras.ru>
Fri, 14 Nov 2014 23:11:59 +0000 (02:11 +0300)
committerLuis Henriques <luis.henriques@canonical.com>
Mon, 1 Dec 2014 10:02:09 +0000 (10:02 +0000)
commit 8c2dd54485ccee7fc4086611e188478584758c8d upstream.

In case of any failure ieee802154fake_probe() just calls unregister_netdev().
But it does not look safe to unregister netdevice before it was registered.

The patch implements straightforward resource deallocation in case of
failure in ieee802154fake_probe().

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
drivers/net/ieee802154/fakehard.c

index 78f18be3bbf2a76b7c245abef4aabd34faf3c72f..c6aaa3d9de6352719dc461d5c7caa99240243e01 100644 (file)
@@ -376,17 +376,20 @@ static int ieee802154fake_probe(struct platform_device *pdev)
 
        err = wpan_phy_register(phy);
        if (err)
-               goto out;
+               goto err_phy_reg;
 
        err = register_netdev(dev);
-       if (err < 0)
-               goto out;
+       if (err)
+               goto err_netdev_reg;
 
        dev_info(&pdev->dev, "Added ieee802154 HardMAC hardware\n");
        return 0;
 
-out:
-       unregister_netdev(dev);
+err_netdev_reg:
+       wpan_phy_unregister(phy);
+err_phy_reg:
+       free_netdev(dev);
+       wpan_phy_free(phy);
        return err;
 }