ieee802154: fix error handling in ieee802154fake_probe()

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>
This commit is contained in:
Alexey Khoroshilov 2014-11-15 02:11:59 +03:00 committed by David S. Miller
parent f1227c5c1b
commit 8c2dd54485

View File

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