提交 4446065a 编写于 作者: K Krzysztof Halasa 提交者: Jeff Garzik

[PATCH] WAN: ioremap() failure checks in drivers

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: NKrzysztof Halasa <khc@pm.waw.pl>
Signed-off-by: NJeff Garzik <jeff@garzik.org>
上级 4a31e348
...@@ -326,21 +326,21 @@ static int __init c101_run(unsigned long irq, unsigned long winbase) ...@@ -326,21 +326,21 @@ static int __init c101_run(unsigned long irq, unsigned long winbase)
if (request_irq(irq, sca_intr, 0, devname, card)) { if (request_irq(irq, sca_intr, 0, devname, card)) {
printk(KERN_ERR "c101: could not allocate IRQ\n"); printk(KERN_ERR "c101: could not allocate IRQ\n");
c101_destroy_card(card); c101_destroy_card(card);
return(-EBUSY); return -EBUSY;
} }
card->irq = irq; card->irq = irq;
if (!request_mem_region(winbase, C101_MAPPED_RAM_SIZE, devname)) { if (!request_mem_region(winbase, C101_MAPPED_RAM_SIZE, devname)) {
printk(KERN_ERR "c101: could not request RAM window\n"); printk(KERN_ERR "c101: could not request RAM window\n");
c101_destroy_card(card); c101_destroy_card(card);
return(-EBUSY); return -EBUSY;
} }
card->phy_winbase = winbase; card->phy_winbase = winbase;
card->win0base = ioremap(winbase, C101_MAPPED_RAM_SIZE); card->win0base = ioremap(winbase, C101_MAPPED_RAM_SIZE);
if (!card->win0base) { if (!card->win0base) {
printk(KERN_ERR "c101: could not map I/O address\n"); printk(KERN_ERR "c101: could not map I/O address\n");
c101_destroy_card(card); c101_destroy_card(card);
return -EBUSY; return -EFAULT;
} }
card->tx_ring_buffers = TX_RING_BUFFERS; card->tx_ring_buffers = TX_RING_BUFFERS;
......
...@@ -387,6 +387,11 @@ static int __init n2_run(unsigned long io, unsigned long irq, ...@@ -387,6 +387,11 @@ static int __init n2_run(unsigned long io, unsigned long irq,
} }
card->phy_winbase = winbase; card->phy_winbase = winbase;
card->winbase = ioremap(winbase, USE_WINDOWSIZE); 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(0, io + N2_PCR);
outb(winbase >> 12, io + N2_BAR); outb(winbase >> 12, io + N2_BAR);
......
...@@ -354,6 +354,7 @@ static int __devinit pci200_pci_init_one(struct pci_dev *pdev, ...@@ -354,6 +354,7 @@ static int __devinit pci200_pci_init_one(struct pci_dev *pdev,
card->rambase == NULL) { card->rambase == NULL) {
printk(KERN_ERR "pci200syn: ioremap() failed\n"); printk(KERN_ERR "pci200syn: ioremap() failed\n");
pci200_pci_remove_one(pdev); pci200_pci_remove_one(pdev);
return -EFAULT;
} }
/* Reset PLX */ /* Reset PLX */
......
...@@ -634,7 +634,13 @@ static int __devinit wanxl_pci_init_one(struct pci_dev *pdev, ...@@ -634,7 +634,13 @@ static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
/* set up PLX mapping */ /* set up PLX mapping */
plx_phy = pci_resource_start(pdev, 0); plx_phy = pci_resource_start(pdev, 0);
card->plx = ioremap_nocache(plx_phy, 0x70); 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 #if RESET_WHILE_LOADING
wanxl_reset(card); wanxl_reset(card);
...@@ -700,6 +706,12 @@ static int __devinit wanxl_pci_init_one(struct pci_dev *pdev, ...@@ -700,6 +706,12 @@ static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
} }
mem = ioremap_nocache(mem_phy, PDM_OFFSET + sizeof(firmware)); 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) for (i = 0; i < sizeof(firmware); i += 4)
writel(htonl(*(u32*)(firmware + i)), mem + PDM_OFFSET + i); writel(htonl(*(u32*)(firmware + i)), mem + PDM_OFFSET + i);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册