From: Viresh Kumar Date: Tue, 11 Jun 2013 11:02:44 +0000 (+0530) Subject: sched: Fix memory leakage in build_sched_groups() X-Git-Tag: next-20130628~36^2~17^2~17 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=cd08e9234c987766ad077bba80eb5a07d0855525;p=karo-tx-linux.git sched: Fix memory leakage in build_sched_groups() In build_sched_groups() we don't need to call get_group() for cpus which are already covered in previous iterations. Calling get_group() would mark the group used and eventually leak it since we wouldn't connect it and not find it again to free it. This will happen only in cases where sg->cpumask contained more than one cpu (For any topology level). This patch would free sg's memory for all cpus leaving the group leader as the group isn't marked used now. Signed-off-by: Viresh Kumar Signed-off-by: Peter Zijlstra Link: http://lkml.kernel.org/r/7a61e955abdcbb1dfa9fe493f11a5ec53a11ddd3.1370948150.git.viresh.kumar@linaro.org Signed-off-by: Ingo Molnar --- diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 3388387e1330..014c97f00732 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -5357,12 +5357,12 @@ build_sched_groups(struct sched_domain *sd, int cpu) for_each_cpu(i, span) { struct sched_group *sg; - int group = get_group(i, sdd, &sg); - int j; + int group, j; if (cpumask_test_cpu(i, covered)) continue; + group = get_group(i, sdd, &sg); cpumask_clear(sched_group_cpus(sg)); sg->sgp->power = 0; cpumask_setall(sched_group_mask(sg));