diff options
author | Alexey Khoroshilov <khoroshilov@ispras.ru> | 2014-11-15 02:11:59 +0300 |
---|---|---|
committer | Jiri Slaby <jslaby@suse.cz> | 2014-11-27 11:14:06 +0100 |
commit | 0d55bc1cf51599a78ae3bb5182fa2eda1e9c0c7c (patch) | |
tree | 3d99ecd10210eb48d39a235abae25fc09efc3d85 | |
parent | 8cdc2cb0cfeeeac2fe600431fe7f41847c61f6f9 (diff) | |
download | lwn-0d55bc1cf51599a78ae3bb5182fa2eda1e9c0c7c.tar.gz lwn-0d55bc1cf51599a78ae3bb5182fa2eda1e9c0c7c.zip |
ieee802154: fix error handling in ieee802154fake_probe()
[ Upstream commit 8c2dd54485ccee7fc4086611e188478584758c8d ]
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: Jiri Slaby <jslaby@suse.cz>
-rw-r--r-- | drivers/net/ieee802154/fakehard.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/net/ieee802154/fakehard.c b/drivers/net/ieee802154/fakehard.c index bf0d55e2dd63..6adbef89c4b0 100644 --- a/drivers/net/ieee802154/fakehard.c +++ b/drivers/net/ieee802154/fakehard.c @@ -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; } |