Skip to content

Commit

Permalink
net/smsc911x: Repair broken failure paths
Browse files Browse the repository at this point in the history
Current failure paths attempt to free resources which we failed to request
and disable resources which we failed to enable ones. This leads to kernel
oops/panic. This patch does some simple re-ordering to prevent this from
happening.

Cc: netdev@vger.kernel.org
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Lee Jones authored and David S. Miller committed May 30, 2012
1 parent 3bbf372 commit 2e1d4a0
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions drivers/net/ethernet/smsc/smsc911x.c
Original file line number Diff line number Diff line change
Expand Up @@ -2390,11 +2390,11 @@ static int __devinit smsc911x_drv_probe(struct platform_device *pdev)

retval = smsc911x_request_resources(pdev);
if (retval)
goto out_return_resources;
goto out_request_resources_fail;

retval = smsc911x_enable_resources(pdev);
if (retval)
goto out_disable_resources;
goto out_enable_resources_fail;

if (pdata->ioaddr == NULL) {
SMSC_WARN(pdata, probe, "Error smsc911x base address invalid");
Expand Down Expand Up @@ -2501,8 +2501,9 @@ static int __devinit smsc911x_drv_probe(struct platform_device *pdev)
free_irq(dev->irq, dev);
out_disable_resources:
(void)smsc911x_disable_resources(pdev);
out_return_resources:
out_enable_resources_fail:
smsc911x_free_resources(pdev);
out_request_resources_fail:
platform_set_drvdata(pdev, NULL);
iounmap(pdata->ioaddr);
free_netdev(dev);
Expand Down

0 comments on commit 2e1d4a0

Please sign in to comment.