From: Milton Miller Date: Mon, 15 Oct 2007 15:00:19 +0000 (+0200) Subject: sched: domain sysctl fixes: use for_each_online_cpu() X-Git-Tag: v2.6.24-rc1~1289^2~9 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=97b6ea7b6369d51a451a7d5747a7939a593fdd9c;p=linux-2.6 sched: domain sysctl fixes: use for_each_online_cpu() init_sched_domain_sysctl was walking cpus 0-n and referencing per_cpu variables. If the cpus_possible mask is not contigious this will result in a crash referencing unallocated data. If the online mask is not contigious then we would show offline cpus and miss online ones. Signed-off-by: Milton Miller Signed-off-by: Ingo Molnar --- diff --git a/kernel/sched.c b/kernel/sched.c index d29950a604..374f42170d 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -5326,11 +5326,12 @@ static void init_sched_domain_sysctl(void) sd_ctl_dir[0].child = entry; - for (i = 0; i < cpu_num; i++, entry++) { + for_each_online_cpu(i) { snprintf(buf, 32, "cpu%d", i); entry->procname = kstrdup(buf, GFP_KERNEL); entry->mode = 0555; entry->child = sd_alloc_ctl_cpu_table(i); + entry++; } sd_sysctl_header = register_sysctl_table(sd_ctl_root); }