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

    \
     
     \ /
      Last update: 2006-03-11 16:14    [W:0.021 / U:0.148 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site