summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordilinger@debian.org <dilinger@debian.org>2005-03-18 21:32:44 -0800
committerGreg KH <gregkh@suse.de>2005-05-12 10:00:13 -0700
commit8107bb0f1014a9af87a889feb20644f0845a08bd (patch)
tree37efa71201ccdb2e1a84c5892ccc2a87b23bc33b
parent8c7030938ff6a34e1db840383900f8d8c427c644 (diff)
downloadlinux-stable-8107bb0f1014a9af87a889feb20644f0845a08bd.tar.gz
linux-stable-8107bb0f1014a9af87a889feb20644f0845a08bd.tar.bz2
linux-stable-8107bb0f1014a9af87a889feb20644f0845a08bd.zip
[PATCH] Possible AMD8111e free irq issue
It seems to me that if in the amd8111e_open() fuction dev->irq isn't zero and the irq request succeeds it might not get released anymore. Specifically, on failure of the amd8111e_restart() call the function returns -ENOMEM without releasing the irq. The amd8111e_restart() function can fail because of various pci_alloc_consistent() and dev_alloc_skb() calls in amd8111e_init_ring() which is being called by amd8111e_restart. 1374 if(dev->irq ==0 || request_irq(dev->irq, amd8111e_interrupt, SA_SHIRQ, 1375 dev->name, dev)) 1376 return -EAGAIN; Signed-off-by: Jeff Garzik <jgarzik@pobox.com> Signed-off-by: Chris Wright <chrisw@osdl.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rwxr-xr-xdrivers/net/amd8111e.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/net/amd8111e.c b/drivers/net/amd8111e.c
index f1d81901ecf1..4e6f7553ffec 100755
--- a/drivers/net/amd8111e.c
+++ b/drivers/net/amd8111e.c
@@ -1381,6 +1381,8 @@ static int amd8111e_open(struct net_device * dev )
if(amd8111e_restart(dev)){
spin_unlock_irq(&lp->lock);
+ if (dev->irq)
+ free_irq(dev->irq, dev);
return -ENOMEM;
}
/* Start ipg timer */