x86/mm: Randomize per-cpu entry area
authorPeter Zijlstra <peterz@infradead.org>
Thu, 27 Oct 2022 21:54:41 +0000 (14:54 -0700)
committerDave Hansen <dave.hansen@linux.intel.com>
Thu, 15 Dec 2022 18:37:26 +0000 (10:37 -0800)
commit97e3d26b5e5f371b3ee223d94dd123e6c442ba80
tree80ee0994078b5307c6edd071d36574313c995243
parent3f148f3318140035e87decc1214795ff0755757b
x86/mm: Randomize per-cpu entry area

Seth found that the CPU-entry-area; the piece of per-cpu data that is
mapped into the userspace page-tables for kPTI is not subject to any
randomization -- irrespective of kASLR settings.

On x86_64 a whole P4D (512 GB) of virtual address space is reserved for
this structure, which is plenty large enough to randomize things a
little.

As such, use a straight forward randomization scheme that avoids
duplicates to spread the existing CPUs over the available space.

  [ bp: Fix le build. ]

Reported-by: Seth Jenkins <sethjenkins@google.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
arch/x86/include/asm/cpu_entry_area.h
arch/x86/include/asm/pgtable_areas.h
arch/x86/kernel/hw_breakpoint.c
arch/x86/mm/cpu_entry_area.c