Messages in this thread Patch in this message | | | From | Yunsheng Lin <> | Subject | [PATCH] arm64: numa: check the node id before accessing node_to_cpumask_map | Date | Fri, 30 Aug 2019 10:26:31 +0800 |
| |
Some buggy bios may not set the device' numa id, and dev_to_node will return -1, which may cause global-out-of-bounds error detected by KASAN.
This patch changes cpumask_of_node to return cpu_none_mask if the node is not valid, and sync the cpumask_of_node between the cpumask_of_node function in numa.h and numa.c.
Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com> --- arch/arm64/include/asm/numa.h | 6 ++++++ arch/arm64/mm/numa.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/include/asm/numa.h b/arch/arm64/include/asm/numa.h index 626ad01..da891ed 100644 --- a/arch/arm64/include/asm/numa.h +++ b/arch/arm64/include/asm/numa.h @@ -25,6 +25,12 @@ const struct cpumask *cpumask_of_node(int node); /* Returns a pointer to the cpumask of CPUs on Node 'node'. */ static inline const struct cpumask *cpumask_of_node(int node) { + if (node >= nr_node_ids || node < 0) + return cpu_none_mask; + + if (!node_to_cpumask_map[node]) + return cpu_online_mask; + return node_to_cpumask_map[node]; } #endif diff --git a/arch/arm64/mm/numa.c b/arch/arm64/mm/numa.c index 4f241cc..3846313 100644 --- a/arch/arm64/mm/numa.c +++ b/arch/arm64/mm/numa.c @@ -46,7 +46,7 @@ EXPORT_SYMBOL(node_to_cpumask_map); */ const struct cpumask *cpumask_of_node(int node) { - if (WARN_ON(node >= nr_node_ids)) + if (WARN_ON(node >= nr_node_ids || node < 0)) return cpu_none_mask; if (WARN_ON(node_to_cpumask_map[node] == NULL)) -- 2.8.1
| |