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 <miltonm@bga.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
5cf9f062c8
commit
97b6ea7b63
@ -5326,11 +5326,12 @@ static void init_sched_domain_sysctl(void)
|
|||||||
|
|
||||||
sd_ctl_dir[0].child = entry;
|
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);
|
snprintf(buf, 32, "cpu%d", i);
|
||||||
entry->procname = kstrdup(buf, GFP_KERNEL);
|
entry->procname = kstrdup(buf, GFP_KERNEL);
|
||||||
entry->mode = 0555;
|
entry->mode = 0555;
|
||||||
entry->child = sd_alloc_ctl_cpu_table(i);
|
entry->child = sd_alloc_ctl_cpu_table(i);
|
||||||
|
entry++;
|
||||||
}
|
}
|
||||||
sd_sysctl_header = register_sysctl_table(sd_ctl_root);
|
sd_sysctl_header = register_sysctl_table(sd_ctl_root);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user