From 79be604815d654a172888ec76b414f4d885d56b9 Mon Sep 17 00:00:00 2001 From: Vasiliy Kulikov Date: Tue, 28 Sep 2010 21:49:35 +0400 Subject: [PATCH] --- yaml --- r: 219999 b: refs/heads/master c: c95aef4161c38775d58cca522e4c4b69eb97548e h: refs/heads/master i: 219997: 4cf2cf218241574fa18424072bbf9f44ce01e734 219995: 99c5a207fcfb480f3c39f8090683cca8819cd555 219991: dc044bcc0fa094571688958be6c2d3ec519d7412 219983: 97f6c50792d99541ef99e7d9003c8c2ea2e10c97 219967: ef151bbcaf605c001d23f78d45cb845443299c1b v: v3 --- [refs] | 2 +- .../staging/ft1000/ft1000-pcmcia/ft1000_hw.c | 32 ++++++++++++------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/[refs] b/[refs] index 6f2cc42790cf..bcaf8ee2b870 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 52cab756a2da989859322aed0573a851aa88731c +refs/heads/master: c95aef4161c38775d58cca522e4c4b69eb97548e diff --git a/trunk/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c b/trunk/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c index a6ba84c242d1..eed7e94308db 100644 --- a/trunk/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c +++ b/trunk/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c @@ -1686,6 +1686,7 @@ int ft1000_copy_up_pkt(struct net_device *dev) tempword); ft1000_flush_fifo(dev, DSP_PKTPHCKSUM_INFO); info->stats.rx_errors++; + kfree_skb(skb); return FAILURE; } //subtract the number of bytes read already @@ -1711,6 +1712,7 @@ int ft1000_copy_up_pkt(struct net_device *dev) *pbuffer++ = (u8) (tempword >> 8); *pbuffer++ = (u8) tempword; if (ft1000_chkcard(dev) == FALSE) { + kfree_skb(skb); return FAILURE; } } @@ -2236,15 +2238,17 @@ struct net_device *init_ft1000_card(unsigned short irq, int port, if (request_irq(dev->irq, ft1000_interrupt, IRQF_SHARED, dev->name, dev)) { printk(KERN_ERR "ft1000: Could not request_irq\n"); - kfree(dev); - return (NULL); + goto err_dev; } - request_region(dev->base_addr, 256, dev->name); + if (request_region(dev->base_addr, 256, dev->name) == NULL) { + printk(KERN_ERR "ft1000: Could not request_region\n"); + goto err_irq; + } if (register_netdev(dev) != 0) { DEBUG(0, "ft1000: Could not register netdev"); - return NULL; + goto err_reg; } info->AsicID = ft1000_read_reg(dev, FT1000_REG_ASIC_ID); @@ -2252,19 +2256,13 @@ struct net_device *init_ft1000_card(unsigned short irq, int port, DEBUG(0, "ft1000_hw: ELECTRABUZZ ASIC\n"); if (request_firmware(&fw_entry, "ft1000.img", fdev) != 0) { printk(KERN_INFO "ft1000: Could not open ft1000.img\n"); - unregister_netdev(dev); - free_irq(dev->irq, dev); - kfree(dev); - return NULL; + goto err_unreg; } } else { DEBUG(0, "ft1000_hw: MAGNEMITE ASIC\n"); if (request_firmware(&fw_entry, "ft2000.img", fdev) != 0) { printk(KERN_INFO "ft1000: Could not open ft2000.img\n"); - unregister_netdev(dev); - free_irq(dev->irq, dev); - kfree(dev); - return NULL; + goto err_unreg; } } @@ -2279,6 +2277,16 @@ struct net_device *init_ft1000_card(unsigned short irq, int port, dev->dev_addr[1], dev->dev_addr[2], dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); return dev; + +err_unreg: + unregister_netdev(dev); +err_reg: + release_region(dev->base_addr, 256); +err_irq: + free_irq(dev->irq, dev); +err_dev: + free_netdev(dev); + return NULL; } EXPORT_SYMBOL(init_ft1000_card);