Messages in this thread | | | Date | Sat, 11 Mar 2006 22:33:50 +0400 | From | Manu Abraham <> | Subject | Re: [2.6 patch] drivers/media/dvb/bt8xx/dst_ca.c: fix 2 memory leaks |
| |
Adrian Bunk wrote: > On Sat, Mar 11, 2006 at 05:12:13PM +0100, Adrian Bunk wrote: > >> On Sat, Mar 11, 2006 at 07:53:34PM +0400, Manu Abraham wrote: >> >>> Yeah, it is better indeed. Would you mind if i schedule this for a >>> little while later, since i have a couple of other fixes/additions as well ? >>> >> There's no need to hurry since the whole problem is only a small memory >> leak in a very unlikely case. >> > > But when you'll apply it, please used the improved version below (based > on a suggestion by Ingo Oeser). > >
Ok, i will apply the same thing.
> cu > Adrian > >
Thanks, Manu
> 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 > and removed the unneeded casts. > > > 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 = kmalloc(sizeof (struct ca_msg), GFP_KERNEL); > + p_ca_slot_info = kmalloc(sizeof (struct ca_slot_info), GFP_KERNEL); > + p_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/
| |