lkml.org 
[lkml]   [2009]   [Dec]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:sched/urgent] sched: Fix memory leak in two error corner cases
    Commit-ID:  dfc12eb26a285df316be68a808af86964f3bff86
    Gitweb: http://git.kernel.org/tip/dfc12eb26a285df316be68a808af86964f3bff86
    Author: Phil Carmody <ext-phil.2.carmody@nokia.com>
    AuthorDate: Thu, 10 Dec 2009 14:29:37 +0200
    Committer: Ingo Molnar <mingo@elte.hu>
    CommitDate: Thu, 10 Dec 2009 14:28:10 +0100

    sched: Fix memory leak in two error corner cases

    If the second in each of these pairs of allocations fails, then the
    first one will not be freed in the error route out.

    Found by a static code analysis tool.

    Signed-off-by: Phil Carmody <ext-phil.2.carmody@nokia.com>
    Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    LKML-Reference: <1260448177-28448-1-git-send-email-ext-phil.2.carmody@nokia.com>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
    ---
    kernel/sched.c | 8 ++++++--
    1 files changed, 6 insertions(+), 2 deletions(-)

    diff --git a/kernel/sched.c b/kernel/sched.c
    index 3de3dea..36cc05a 100644
    --- a/kernel/sched.c
    +++ b/kernel/sched.c
    @@ -9855,13 +9855,15 @@ int alloc_fair_sched_group(struct task_group *tg, struct task_group *parent)
    se = kzalloc_node(sizeof(struct sched_entity),
    GFP_KERNEL, cpu_to_node(i));
    if (!se)
    - goto err;
    + goto err_free_rq;

    init_tg_cfs_entry(tg, cfs_rq, se, i, 0, parent->se[i]);
    }

    return 1;

    + err_free_rq:
    + kfree(cfs_rq);
    err:
    return 0;
    }
    @@ -9943,13 +9945,15 @@ int alloc_rt_sched_group(struct task_group *tg, struct task_group *parent)
    rt_se = kzalloc_node(sizeof(struct sched_rt_entity),
    GFP_KERNEL, cpu_to_node(i));
    if (!rt_se)
    - goto err;
    + goto err_free_rq;

    init_tg_rt_entry(tg, rt_rq, rt_se, i, 0, parent->rt_se[i]);
    }

    return 1;

    + err_free_rq:
    + kfree(rt_rq);
    err:
    return 0;
    }

    \
     
     \ /
      Last update: 2009-12-10 14:41    [W:0.022 / U:1.256 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site