• Kees Cook's avatar
    x86/mm: Avoid VLA in pgd_alloc() · 184d47f0
    Kees Cook authored
    Arnd Bergmann reported that turning on -Wvla found a new (unintended) VLA usage:
    
      arch/x86/mm/pgtable.c: In function 'pgd_alloc':
      include/linux/build_bug.h:29:45: error: ISO C90 forbids variable length array 'u_pmds' [-Werror=vla]
      arch/x86/mm/pgtable.c:190:34: note: in expansion of macro 'static_cpu_has'
       #define PREALLOCATED_USER_PMDS  (static_cpu_has(X86_FEATURE_PTI) ? \
                                        ^~~~~~~~~~~~~~
      arch/x86/mm/pgtable.c:431:16: note: in expansion of macro 'PREALLOCATED_USER_PMDS'
        pmd_t *u_pmds[PREALLOCATED_USER_PMDS];
                    ^~~~~~~~~~~~~~~~~~~~~~
    
    Use the actual size of the array that is used for X86_FEATURE_PTI,
    which is known at build time, instead of the variable size.
    
    [ mingo: Squashed original fix with followup fix to avoid bisection breakage, wrote new changelog. ]
    Reported-by: default avatarArnd Bergmann <arnd@arndb.de>
    Original-written-by: default avatarArnd Bergmann <arnd@arndb.de>
    Reported-by: default avatarBorislav Petkov <bp@alien8.de>
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Joerg Roedel <jroedel@suse.de>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Toshi Kani <toshi.kani@hpe.com>
    Fixes: 1be3f247c288 ("x86/mm: Avoid VLA in pgd_alloc()")
    Link: http://lkml.kernel.org/r/20181008235434.GA35035@beastSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    184d47f0
pgtable.c 21 KB