Messages in this thread Patch in this message | | | Date | Sat, 11 Mar 2006 16:11:42 +0100 | From | Adrian Bunk <> | Subject | [2.6 patch] drivers/media/dvb/bt8xx/dst_ca.c: fix 2 memory leaks |
| |
The Coverity checker spotted that thre was a memory leak if the second or third kmalloc() failed.
Besides this, I've also consolidated the three error handlings into one.
Signed-off-by: Adrian Bunk <bunk@stusta.de>
---
drivers/media/dvb/bt8xx/dst_ca.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-)
--- linux-2.6.16-rc5-mm3-full/drivers/media/dvb/bt8xx/dst_ca.c.old 2006-03-11 14:36:59.000000000 +0100 +++ linux-2.6.16-rc5-mm3-full/drivers/media/dvb/bt8xx/dst_ca.c 2006-03-11 15:28:26.000000000 +0100 @@ -473,18 +473,17 @@ static int dst_ca_ioctl(struct inode *in void __user *arg = (void __user *)ioctl_arg; int result = 0; - if ((p_ca_message = (struct ca_msg *) kmalloc(sizeof (struct ca_msg), GFP_KERNEL)) == NULL) { - dprintk(verbose, DST_CA_ERROR, 1, " Memory allocation failure"); - return -ENOMEM; - } - if ((p_ca_slot_info = (struct ca_slot_info *) kmalloc(sizeof (struct ca_slot_info), GFP_KERNEL)) == NULL) { - dprintk(verbose, DST_CA_ERROR, 1, " Memory allocation failure"); - return -ENOMEM; - } - if ((p_ca_caps = (struct ca_caps *) kmalloc(sizeof (struct ca_caps), GFP_KERNEL)) == NULL) { + p_ca_message = (struct ca_msg *) kmalloc(sizeof (struct ca_msg), GFP_KERNEL); + p_ca_slot_info = (struct ca_slot_info *) kmalloc(sizeof (struct ca_slot_info), GFP_KERNEL); + p_ca_caps = (struct ca_caps *) kmalloc(sizeof (struct ca_caps), GFP_KERNEL); + + + if (!p_ca_message || !p_ca_slot_info || !p_ca_caps) { dprintk(verbose, DST_CA_ERROR, 1, " Memory allocation failure"); - return -ENOMEM; + result = -ENOMEM; + goto free_mem_and_exit; } + /* We have now only the standard ioctl's, the driver is upposed to handle internals. */ switch (cmd) { case CA_SEND_MSG: - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |