diff options
author | Mike McCormack <mikem@ring3k.org> | 2009-09-23 05:50:36 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-10-01 05:03:18 +0200 |
commit | f1914226e12044f0cacda59efc91bee972c30341 (patch) | |
tree | 8cacad205caa6d14829f196bfad3f46e72eac858 /drivers/net/skge.c | |
parent | bcm63xx_enet: timeout off by one in do_mdio_op() (diff) | |
download | linux-f1914226e12044f0cacda59efc91bee972c30341.tar.xz linux-f1914226e12044f0cacda59efc91bee972c30341.zip |
skge: Make sure both ports initialize correctly
If allocation of the second ports fails, make sure that hw->ports
is not 2 otherwise we'll crash trying to access the second port.
This fix is copied from a similar fix in the sky2 driver (ca519274...),
but is untested, as I don't have a skge card.
Signed-off-by: Mike McCormack <mikem@ring3k.org>
Acked-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/skge.c')
-rw-r--r-- | drivers/net/skge.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/net/skge.c b/drivers/net/skge.c index 55bad4081966..2bb21ffbde3a 100644 --- a/drivers/net/skge.c +++ b/drivers/net/skge.c @@ -3982,14 +3982,17 @@ static int __devinit skge_probe(struct pci_dev *pdev, } skge_show_addr(dev); - if (hw->ports > 1 && (dev1 = skge_devinit(hw, 1, using_dac))) { - if (register_netdev(dev1) == 0) + if (hw->ports > 1) { + dev1 = skge_devinit(hw, 1, using_dac); + if (dev1 && register_netdev(dev1) == 0) skge_show_addr(dev1); else { /* Failure to register second port need not be fatal */ dev_warn(&pdev->dev, "register of second port failed\n"); hw->dev[1] = NULL; - free_netdev(dev1); + hw->ports = 1; + if (dev1) + free_netdev(dev1); } } pci_set_drvdata(pdev, hw); |