| From foo@baz Wed Dec 3 17:06:53 PST 2014 |
| From: Alexey Khoroshilov <khoroshilov@ispras.ru> |
| Date: Sat, 15 Nov 2014 02:11:59 +0300 |
| Subject: ieee802154: fix error handling in ieee802154fake_probe() |
| |
| From: Alexey Khoroshilov <khoroshilov@ispras.ru> |
| |
| [ 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: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ieee802154/fakehard.c | 13 ++++++++----- |
| 1 file changed, 8 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/net/ieee802154/fakehard.c |
| +++ b/drivers/net/ieee802154/fakehard.c |
| @@ -376,17 +376,20 @@ static int ieee802154fake_probe(struct p |
| |
| 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; |
| } |
| |