From: Peter Zijlstra Date: Tue, 19 Nov 2013 15:41:49 +0000 (+0100) Subject: sched: Avoid NULL dereference on sd_busy X-Git-Tag: submit/tizen_common/20140905.094502~452 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a2198407845fa9d85b590eafafacf3b6a82d3528;p=sdk%2Femulator%2Femulator-kernel.git sched: Avoid NULL dereference on sd_busy commit 42eb088ed246a5a817bb45a8b32fe234cf1c0f8b upstream. Commit 37dc6b50cee9 ("sched: Remove unnecessary iteration over sched domains to update nr_busy_cpus") forgot to clear 'sd_busy' under some conditions leading to a possible NULL deref in set_cpu_sd_state_idle(). Reported-by: Anton Blanchard Cc: Preeti U Murthy Signed-off-by: Peter Zijlstra Link: http://lkml.kernel.org/r/20131118113701.GF3866@twins.programming.kicks-ass.net Signed-off-by: Ingo Molnar Signed-off-by: Jiri Slaby --- diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 6135b7c6bcfe..bc2f26d03751 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -5132,8 +5132,9 @@ static void update_top_cache_domain(int cpu) if (sd) { id = cpumask_first(sched_domain_span(sd)); size = cpumask_weight(sched_domain_span(sd)); - rcu_assign_pointer(per_cpu(sd_busy, cpu), sd->parent); + sd = sd->parent; /* sd_busy */ } + rcu_assign_pointer(per_cpu(sd_busy, cpu), sd); rcu_assign_pointer(per_cpu(sd_llc, cpu), sd); per_cpu(sd_llc_size, cpu) = size;