[PATCH] applicom: fix LEAK, unwind on errors;

From: Randy.Dunlap
Date: Fri Oct 03 2003 - 18:36:38 EST


On Fri, 3 Oct 2003 15:46:40 -0700 John Cherry <cherry@xxxxxxxx> wrote:

| drivers/char/applicom.c:260:2: warning: #warning "LEAK"
| drivers/char/applicom.c:524:2: warning: #warning "Je suis stupide. DW. - copy*user in cli"
| drivers/char/applicom.c:67: warning: `applicom_pci_tbl' defined but not used


Here's a patch for applicom.c.
David Woodhouse has reviewed and okayed it, although he no
longer has hardware to test it.

Any other reviews/comments on it?
If not, I'll ask Andrew to merge it.

--
~Randy


patch_name: applicom_leak.patch
patch_version: 2003-09-17.11:06:35
author: Randy.Dunlap <rddunlap@xxxxxxxx>
description: fix ioremap() leak and #warning;
unwind init on errors;
don't save irq on request_irq() failure;
product: Linux
product_versions: 2.6.0-test5 (and -test6)
maintainer: David Woodhouse (dwmw2@xxxxxxxxxxxxx)
diffstat: =
drivers/char/applicom.c | 15 ++++++++++-----
1 files changed, 10 insertions(+), 5 deletions(-)


diff -Naurp ./drivers/char/applicom.c~appleak ./drivers/char/applicom.c
--- ./drivers/char/applicom.c~appleak 2003-09-08 12:50:29.000000000 -0700
+++ ./drivers/char/applicom.c 2003-09-17 11:06:01.000000000 -0700
@@ -192,7 +192,7 @@ int __init applicom_init(void)
{
int i, numisa = 0;
struct pci_dev *dev = NULL;
- void *RamIO;
+ void *RamIO, *maxRamIO;
int boardno;

printk(KERN_INFO "Applicom driver: $Id: ac.c,v 1.30 2000/03/22 16:03:57 dwmw2 Exp $\n");
@@ -214,6 +214,7 @@ int __init applicom_init(void)

if (!RamIO) {
printk(KERN_INFO "ac.o: Failed to ioremap PCI memory space at 0x%lx\n", dev->resource[0].start);
+ pci_disable_device(dev);
return -EIO;
}

@@ -225,12 +226,14 @@ int __init applicom_init(void)
(unsigned long)RamIO,0))) {
printk(KERN_INFO "ac.o: PCI Applicom device doesn't have correct signature.\n");
iounmap(RamIO);
+ pci_disable_device(dev);
continue;
}

if (request_irq(dev->irq, &ac_interrupt, SA_SHIRQ, "Applicom PCI", &dummy)) {
printk(KERN_INFO "Could not allocate IRQ %d for PCI Applicom device.\n", dev->irq);
iounmap(RamIO);
+ pci_disable_device(dev);
apbs[boardno - 1].RamIO = 0;
continue;
}
@@ -257,10 +260,9 @@ int __init applicom_init(void)

/* Now try the specified ISA cards */

-#warning "LEAK"
- RamIO = ioremap(mem, LEN_RAM_IO * MAX_ISA_BOARD);
+ maxRamIO = ioremap(mem, LEN_RAM_IO * MAX_ISA_BOARD);

- if (!RamIO)
+ if (!maxRamIO)
printk(KERN_INFO "ac.o: Failed to ioremap ISA memory space at 0x%lx\n", mem);

for (i = 0; i < MAX_ISA_BOARD; i++) {
@@ -285,7 +287,8 @@ int __init applicom_init(void)
iounmap((void *) RamIO);
apbs[boardno - 1].RamIO = 0;
}
- apbs[boardno - 1].irq = irq;
+ else
+ apbs[boardno - 1].irq = irq;
}
else
apbs[boardno - 1].irq = 0;
@@ -296,6 +299,8 @@ int __init applicom_init(void)
if (!numisa)
printk(KERN_WARNING"ac.o: No valid ISA Applicom boards found at mem 0x%lx\n",mem);

+ iounmap(maxRamIO);
+
fin:
init_waitqueue_head(&FlagSleepRec);

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/