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-gli...@google.com/
[2] 
https://lore.kernel.org/lkml/CA+55aFw+Vbj0i=1tgqcr5vqkczwj0qxk6cernou6eedsuda...@mail.gmail.com/
[3] 
https://lore.kernel.org/lkml/ca+55afwgbgqhbp1fkxvrkepzyr5j8n1vkt1vzdz9knmpuxh...@mail.gmail.com/
[4] 
https://lore.kernel.org/lkml/CA+55aFz2500WfbKXAx8s67wrm9=yvju65tplgn_ybynv0ve...@mail.gmail.com/

Signed-off-by: Kees Cook <keesc...@chromium.org>
---
 arch/x86/mm/numa.c                | 18 +++++++++---------
 include/linux/page-flags-layout.h |  2 +-
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c
index 59ba008504dc..38eeb15f3b07 100644
--- a/arch/x86/mm/numa.c
+++ b/arch/x86/mm/numa.c
@@ -541,7 +541,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 */
@@ -569,15 +568,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;
 
diff --git a/include/linux/page-flags-layout.h 
b/include/linux/page-flags-layout.h
index 71283739ffd2..1a4cdec2bd29 100644
--- a/include/linux/page-flags-layout.h
+++ b/include/linux/page-flags-layout.h
@@ -100,7 +100,7 @@
  * there.  This includes the case where there is no node, so it is implicit.
  */
 #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
-- 
2.25.1

Reply via email to