aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/message/fusion/mptbase.c
diff options
context:
space:
mode:
authorJesper Juhl <jesper.juhl@gmail.com>2007-08-10 17:50:51 -0400
committerJames Bottomley <jejb@mulgrave.localdomain>2007-10-12 14:47:13 -0400
commit568761955ad01c6d238d8b12d21a554c1226a37b (patch)
treef855ccc4944cf2646709db63452af6c35bbedc0c /drivers/message/fusion/mptbase.c
parentd7383a234626b58dc6bc210ed806a6911c1f44e1 (diff)
[SCSI] mpt fusion: fix two potential mem leaks
The Coverity checker spotted two potential memory leaks in drivers/message/fusion/mptbase.c::mpt_attach(). There are two returns that may leak the storage allocated for 'ioc' (sizeof(MPT_ADAPTER) bytes). A simple fix would be to simply add two kfree() calls before the return statements, but a better fix (that this patch implements) is to reorder the code so that if we hit the first return condition we don't have to do the allocation at all and then just add a kfree() call for the second case. Signed-off-by: Jesper Juhl <jesper.juhl@gmail.com> Acked-by: "Moore, Eric Dean" <Eric.Moore@lsil.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/message/fusion/mptbase.c')
-rw-r--r--drivers/message/fusion/mptbase.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index 22cb0f8b2bcd..635defd25925 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -1458,18 +1458,18 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
1458 struct proc_dir_entry *dent, *ent; 1458 struct proc_dir_entry *dent, *ent;
1459#endif 1459#endif
1460 1460
1461 if (mpt_debug_level)
1462 printk(KERN_INFO MYNAM ": mpt_debug_level=%xh\n", mpt_debug_level);
1463
1464 if (pci_enable_device(pdev))
1465 return r;
1466
1461 ioc = kzalloc(sizeof(MPT_ADAPTER), GFP_ATOMIC); 1467 ioc = kzalloc(sizeof(MPT_ADAPTER), GFP_ATOMIC);
1462 if (ioc == NULL) { 1468 if (ioc == NULL) {
1463 printk(KERN_ERR MYNAM ": ERROR - Insufficient memory to add adapter!\n"); 1469 printk(KERN_ERR MYNAM ": ERROR - Insufficient memory to add adapter!\n");
1464 return -ENOMEM; 1470 return -ENOMEM;
1465 } 1471 }
1466
1467 ioc->debug_level = mpt_debug_level; 1472 ioc->debug_level = mpt_debug_level;
1468 if (mpt_debug_level)
1469 printk(KERN_INFO MYNAM ": mpt_debug_level=%xh\n", mpt_debug_level);
1470
1471 if (pci_enable_device(pdev))
1472 return r;
1473 1473
1474 dinitprintk(ioc, printk(KERN_WARNING MYNAM ": mpt_adapter_install\n")); 1474 dinitprintk(ioc, printk(KERN_WARNING MYNAM ": mpt_adapter_install\n"));
1475 1475
@@ -1478,6 +1478,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
1478 ": 64 BIT PCI BUS DMA ADDRESSING SUPPORTED\n")); 1478 ": 64 BIT PCI BUS DMA ADDRESSING SUPPORTED\n"));
1479 } else if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { 1479 } else if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) {
1480 printk(KERN_WARNING MYNAM ": 32 BIT PCI BUS DMA ADDRESSING NOT SUPPORTED\n"); 1480 printk(KERN_WARNING MYNAM ": 32 BIT PCI BUS DMA ADDRESSING NOT SUPPORTED\n");
1481 kfree(ioc);
1481 return r; 1482 return r;
1482 } 1483 }
1483 1484