Skip to content

Commit

Permalink
[PATCH] WAN: ioremap() failure checks in drivers
Browse files Browse the repository at this point in the history
Eric Sesterhenn found that pci200syn initialization lacks return
statement in ioremap() error path (coverity bug id #195). It looks
like more WAN drivers have problems with ioremap().

Signed-off-by: Krzysztof Halasa <khc@pm.waw.pl>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
  • Loading branch information
Krzysztof Halasa authored and Jeff Garzik committed Jun 23, 2006
1 parent 4a31e34 commit 4446065
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 3 deletions.
6 changes: 3 additions & 3 deletions drivers/net/wan/c101.c
Original file line number Diff line number Diff line change
Expand Up @@ -326,21 +326,21 @@ static int __init c101_run(unsigned long irq, unsigned long winbase)
if (request_irq(irq, sca_intr, 0, devname, card)) {
printk(KERN_ERR "c101: could not allocate IRQ\n");
c101_destroy_card(card);
return(-EBUSY);
return -EBUSY;
}
card->irq = irq;

if (!request_mem_region(winbase, C101_MAPPED_RAM_SIZE, devname)) {
printk(KERN_ERR "c101: could not request RAM window\n");
c101_destroy_card(card);
return(-EBUSY);
return -EBUSY;
}
card->phy_winbase = winbase;
card->win0base = ioremap(winbase, C101_MAPPED_RAM_SIZE);
if (!card->win0base) {
printk(KERN_ERR "c101: could not map I/O address\n");
c101_destroy_card(card);
return -EBUSY;
return -EFAULT;
}

card->tx_ring_buffers = TX_RING_BUFFERS;
Expand Down
5 changes: 5 additions & 0 deletions drivers/net/wan/n2.c
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,11 @@ static int __init n2_run(unsigned long io, unsigned long irq,
}
card->phy_winbase = winbase;
card->winbase = ioremap(winbase, USE_WINDOWSIZE);
if (!card->winbase) {
printk(KERN_ERR "n2: ioremap() failed\n");
n2_destroy_card(card);
return -EFAULT;
}

outb(0, io + N2_PCR);
outb(winbase >> 12, io + N2_BAR);
Expand Down
1 change: 1 addition & 0 deletions drivers/net/wan/pci200syn.c
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,7 @@ static int __devinit pci200_pci_init_one(struct pci_dev *pdev,
card->rambase == NULL) {
printk(KERN_ERR "pci200syn: ioremap() failed\n");
pci200_pci_remove_one(pdev);
return -EFAULT;
}

/* Reset PLX */
Expand Down
12 changes: 12 additions & 0 deletions drivers/net/wan/wanxl.c
Original file line number Diff line number Diff line change
Expand Up @@ -634,7 +634,13 @@ static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,

/* set up PLX mapping */
plx_phy = pci_resource_start(pdev, 0);

card->plx = ioremap_nocache(plx_phy, 0x70);
if (!card->plx) {
printk(KERN_ERR "wanxl: ioremap() failed\n");
wanxl_pci_remove_one(pdev);
return -EFAULT;
}

#if RESET_WHILE_LOADING
wanxl_reset(card);
Expand Down Expand Up @@ -700,6 +706,12 @@ static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
}

mem = ioremap_nocache(mem_phy, PDM_OFFSET + sizeof(firmware));
if (!mem) {
printk(KERN_ERR "wanxl: ioremap() failed\n");
wanxl_pci_remove_one(pdev);
return -EFAULT;
}

for (i = 0; i < sizeof(firmware); i += 4)
writel(htonl(*(u32*)(firmware + i)), mem + PDM_OFFSET + i);

Expand Down

0 comments on commit 4446065

Please sign in to comment.