diff options
author | Mike McCormack <mikem@ring3k.org> | 2009-09-22 23:50:36 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-09-30 23:03:18 -0400 |
commit | f1914226e12044f0cacda59efc91bee972c30341 (patch) | |
tree | 8cacad205caa6d14829f196bfad3f46e72eac858 /drivers/net/skge.c | |
parent | ec1652af18ef02c7c6ceeabb64f56f16eaf40ae9 (diff) |
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, | |||
3982 | } | 3982 | } |
3983 | skge_show_addr(dev); | 3983 | skge_show_addr(dev); |
3984 | 3984 | ||
3985 | if (hw->ports > 1 && (dev1 = skge_devinit(hw, 1, using_dac))) { | 3985 | if (hw->ports > 1) { |
3986 | if (register_netdev(dev1) == 0) | 3986 | dev1 = skge_devinit(hw, 1, using_dac); |
3987 | if (dev1 && register_netdev(dev1) == 0) | ||
3987 | skge_show_addr(dev1); | 3988 | skge_show_addr(dev1); |
3988 | else { | 3989 | else { |
3989 | /* Failure to register second port need not be fatal */ | 3990 | /* Failure to register second port need not be fatal */ |
3990 | dev_warn(&pdev->dev, "register of second port failed\n"); | 3991 | dev_warn(&pdev->dev, "register of second port failed\n"); |
3991 | hw->dev[1] = NULL; | 3992 | hw->dev[1] = NULL; |
3992 | free_netdev(dev1); | 3993 | hw->ports = 1; |
3994 | if (dev1) | ||
3995 | free_netdev(dev1); | ||
3993 | } | 3996 | } |
3994 | } | 3997 | } |
3995 | pci_set_drvdata(pdev, hw); | 3998 | pci_set_drvdata(pdev, hw); |