diff options
author | Dan Carpenter <dan.carpenter@oracle.com> | 2012-06-05 16:31:29 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-06-07 16:15:09 -0400 |
commit | c3001b773bb63afd403bae37febf3f09826912cb (patch) | |
tree | 575e8c9f53d88ec6ad465f4b0d23fe67e76fa7dc /drivers/net/ethernet/micrel/ks8851_mll.c | |
parent | 69927fccd96b15bd228bb82d356a7a2a0cfaeefb (diff) |
net/ethernet: ks8851_mll unregister_netdev() before freeing
We added another error condition here, but if we were to hit it then
we need to unregister_netdev() before doing the free_netdev().
Otherwise we would hit the BUG_ON() in free_netdev():
BUG_ON(dev->reg_state != NETREG_UNREGISTERED);
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Tested-by: Raffaele Recalcati <raffaele.recalcati@bticino.it>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/micrel/ks8851_mll.c')
-rw-r--r-- | drivers/net/ethernet/micrel/ks8851_mll.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/ethernet/micrel/ks8851_mll.c b/drivers/net/ethernet/micrel/ks8851_mll.c index 70bd329882c..875dd5e264e 100644 --- a/drivers/net/ethernet/micrel/ks8851_mll.c +++ b/drivers/net/ethernet/micrel/ks8851_mll.c | |||
@@ -1606,7 +1606,7 @@ static int __devinit ks8851_probe(struct platform_device *pdev) | |||
1606 | if (!pdata) { | 1606 | if (!pdata) { |
1607 | netdev_err(netdev, "No platform data\n"); | 1607 | netdev_err(netdev, "No platform data\n"); |
1608 | err = -ENODEV; | 1608 | err = -ENODEV; |
1609 | goto err_register; | 1609 | goto err_pdata; |
1610 | } | 1610 | } |
1611 | memcpy(ks->mac_addr, pdata->mac_addr, 6); | 1611 | memcpy(ks->mac_addr, pdata->mac_addr, 6); |
1612 | if (!is_valid_ether_addr(ks->mac_addr)) { | 1612 | if (!is_valid_ether_addr(ks->mac_addr)) { |
@@ -1626,6 +1626,8 @@ static int __devinit ks8851_probe(struct platform_device *pdev) | |||
1626 | (id >> 8) & 0xff, (id >> 4) & 0xf, (id >> 1) & 0x7); | 1626 | (id >> 8) & 0xff, (id >> 4) & 0xf, (id >> 1) & 0x7); |
1627 | return 0; | 1627 | return 0; |
1628 | 1628 | ||
1629 | err_pdata: | ||
1630 | unregister_netdev(netdev); | ||
1629 | err_register: | 1631 | err_register: |
1630 | err_get_irq: | 1632 | err_get_irq: |
1631 | iounmap(ks->hw_addr_cmd); | 1633 | iounmap(ks->hw_addr_cmd); |