x86/mm/numa: Remove uninitialized_var() usage
Using uninitialized_var() is dangerous as it papers over real bugs[1]
(or can in the future), and suppresses unrelated compiler warnings (e.g.
"unused variable"). If the compiler thinks it is uninitialized, either
simply initialize the variable or make compiler changes. As a precursor
to removing[2] this[3] macro[4], refactor code to avoid its need.
The original reason for its use here was to work around the #ifdef
being the only place the variable was used. This is better expressed
using IS_ENABLED() and a new code block where the variable can be used
unconditionally.
[1] https://lore.kernel.org/lkml/20200603174714.192027-1-glider@google.com/
[2] https://lore.kernel.org/lkml/CA+55aFw+Vbj0i=1TGqCR5vQkCzWJ0QxK6CernOU6eedsudAixw@mail.gmail.com/
[3] https://lore.kernel.org/lkml/CA+55aFwgbgqhbp1fkxvRKEpzyR5J8n1vKT1VZdz9knmPuXhOeg@mail.gmail.com/
[4] https://lore.kernel.org/lkml/CA+55aFz2500WfbKXAx8s67wrm9=yVJu65TpLgN_ybYNv0VEOKA@mail.gmail.com/
Fixes: 1e01979c8f
("x86, numa: Implement pfn -> nid mapping granularity check")
Signed-off-by: Kees Cook <keescook@chromium.org>
This commit is contained in:
parent
4b19bec97c
commit
aecfd220b2
|
@ -543,7 +543,6 @@ static void __init numa_clear_kernel_node_hotplug(void)
|
|||
|
||||
static int __init numa_register_memblks(struct numa_meminfo *mi)
|
||||
{
|
||||
unsigned long uninitialized_var(pfn_align);
|
||||
int i, nid;
|
||||
|
||||
/* Account for nodes with cpus and no memory */
|
||||
|
@ -571,15 +570,16 @@ static int __init numa_register_memblks(struct numa_meminfo *mi)
|
|||
* If sections array is gonna be used for pfn -> nid mapping, check
|
||||
* whether its granularity is fine enough.
|
||||
*/
|
||||
#ifdef NODE_NOT_IN_PAGE_FLAGS
|
||||
pfn_align = node_map_pfn_alignment();
|
||||
if (pfn_align && pfn_align < PAGES_PER_SECTION) {
|
||||
printk(KERN_WARNING "Node alignment %LuMB < min %LuMB, rejecting NUMA config\n",
|
||||
PFN_PHYS(pfn_align) >> 20,
|
||||
PFN_PHYS(PAGES_PER_SECTION) >> 20);
|
||||
return -EINVAL;
|
||||
if (IS_ENABLED(NODE_NOT_IN_PAGE_FLAGS)) {
|
||||
unsigned long pfn_align = node_map_pfn_alignment();
|
||||
|
||||
if (pfn_align && pfn_align < PAGES_PER_SECTION) {
|
||||
pr_warn("Node alignment %LuMB < min %LuMB, rejecting NUMA config\n",
|
||||
PFN_PHYS(pfn_align) >> 20,
|
||||
PFN_PHYS(PAGES_PER_SECTION) >> 20);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (!numa_meminfo_cover_memory(mi))
|
||||
return -EINVAL;
|
||||
|
||||
|
|
|
@ -98,9 +98,11 @@
|
|||
/*
|
||||
* We are going to use the flags for the page to node mapping if its in
|
||||
* there. This includes the case where there is no node, so it is implicit.
|
||||
* Note that this #define MUST have a value so that it can be tested with
|
||||
* the IS_ENABLED() macro.
|
||||
*/
|
||||
#if !(NODES_WIDTH > 0 || NODES_SHIFT == 0)
|
||||
#define NODE_NOT_IN_PAGE_FLAGS
|
||||
#define NODE_NOT_IN_PAGE_FLAGS 1
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_NUMA_BALANCING) && LAST_CPUPID_WIDTH == 0
|
||||
|
|
Loading…
Reference in New Issue