lkml.org 
[lkml]   [2006]   [Mar]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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/

    \
     
     \ /
      Last update: 2006-03-11 19:51    [W:0.029 / U:0.244 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site