Commit 5f7865f3e44db4c73fdc454fb2af40806212a7ca
Committed by
Ingo Molnar
1 parent
2b17c545a4
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
sched: Ensure 'sched_domains_numa_levels' is safe to use in other functions
We should temporarily reset 'sched_domains_numa_levels' to 0 after it is reset to 'level' in sched_init_numa(). If it fails to allocate memory for array sched_domains_numa_masks[][], the array will contain less then 'level' members. This could be dangerous when we use it to iterate array sched_domains_numa_masks[][] in other functions. This patch set sched_domains_numa_levels to 0 before initializing array sched_domains_numa_masks[][], and reset it to 'level' when sched_domains_numa_masks[][] is fully initialized. Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1348578751-16904-2-git-send-email-tangchen@cn.fujitsu.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
Showing 1 changed file with 13 additions and 0 deletions Side-by-side Diff
kernel/sched/core.c
... | ... | @@ -6122,6 +6122,17 @@ |
6122 | 6122 | * numbers. |
6123 | 6123 | */ |
6124 | 6124 | |
6125 | + /* | |
6126 | + * Here, we should temporarily reset sched_domains_numa_levels to 0. | |
6127 | + * If it fails to allocate memory for array sched_domains_numa_masks[][], | |
6128 | + * the array will contain less then 'level' members. This could be | |
6129 | + * dangerous when we use it to iterate array sched_domains_numa_masks[][] | |
6130 | + * in other functions. | |
6131 | + * | |
6132 | + * We reset it to 'level' at the end of this function. | |
6133 | + */ | |
6134 | + sched_domains_numa_levels = 0; | |
6135 | + | |
6125 | 6136 | sched_domains_numa_masks = kzalloc(sizeof(void *) * level, GFP_KERNEL); |
6126 | 6137 | if (!sched_domains_numa_masks) |
6127 | 6138 | return; |
... | ... | @@ -6176,6 +6187,8 @@ |
6176 | 6187 | } |
6177 | 6188 | |
6178 | 6189 | sched_domain_topology = tl; |
6190 | + | |
6191 | + sched_domains_numa_levels = level; | |
6179 | 6192 | } |
6180 | 6193 | #else |
6181 | 6194 | static inline void sched_init_numa(void) |