net/smsc911x: Repair broken failure paths
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>
This commit is contained in:
Родитель
3bbf372c6c
Коммит
2e1d4a065a
|
@ -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");
|
||||
|
@ -2501,8 +2501,9 @@ out_free_irq:
|
|||
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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче