Re: [tip:x86/urgent] x86/mm: Avoid VLA in pgd_alloc()

From: Arnd Bergmann
Date: Tue Oct 09 2018 - 03:58:44 EST


On Tue, Oct 9, 2018 at 9:03 AM tip-bot for Kees Cook <tipbot@xxxxxxxxx> wrote:
>
> Commit-ID: 184d47f0fd365108bd06ab26cdb3450b716269fd
> Gitweb: https://git.kernel.org/tip/184d47f0fd365108bd06ab26cdb3450b716269fd
> Author: Kees Cook <keescook@xxxxxxxxxxxx>
> AuthorDate: Mon, 8 Oct 2018 16:54:34 -0700
> Committer: Ingo Molnar <mingo@xxxxxxxxxx>
> CommitDate: Tue, 9 Oct 2018 08:55:07 +0200
>
> x86/mm: Avoid VLA in pgd_alloc()
>
> 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: Arnd Bergmann <arnd@xxxxxxxx>
> Original-written-by: Arnd Bergmann <arnd@xxxxxxxx>
> Reported-by: Borislav Petkov <bp@xxxxxxxxx>
> Signed-off-by: Kees Cook <keescook@xxxxxxxxxxxx>

Thanks for fixing up my incorrect fix, looks correct to me now.

Arnd