linux/arch
Rick Edgecombe c44357c2e7 x86/mm: care about shadow stack guard gap during placement
When memory is being placed, mmap() will take care to respect the guard
gaps of certain types of memory (VM_SHADOWSTACK, VM_GROWSUP and
VM_GROWSDOWN).  In order to ensure guard gaps between mappings, mmap()
needs to consider two things:

 1. That the new mapping isn't placed in an any existing mappings guard
    gaps.
 2. That the new mapping isn't placed such that any existing mappings
    are not in *its* guard gaps.

The longstanding behavior of mmap() is to ensure 1, but not take any care
around 2.  So for example, if there is a PAGE_SIZE free area, and a mmap()
with a PAGE_SIZE size, and a type that has a guard gap is being placed,
mmap() may place the shadow stack in the PAGE_SIZE free area.  Then the
mapping that is supposed to have a guard gap will not have a gap to the
adjacent VMA.

Now that the vm_flags is passed into the arch get_unmapped_area()'s, and
vm_unmapped_area() is ready to consider it, have VM_SHADOW_STACK's get
guard gap consideration for scenario 2.

Link: https://lkml.kernel.org/r/20240326021656.202649-14-rick.p.edgecombe@intel.com
Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Aneesh Kumar K.V <aneesh.kumar@kernel.org>
Cc: Borislav Petkov (AMD) <bp@alien8.de>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Deepak Gupta <debug@rivosinc.com>
Cc: Guo Ren <guoren@kernel.org>
Cc: Helge Deller <deller@gmx.de>
Cc: H. Peter Anvin (Intel) <hpa@zytor.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Liam R. Howlett <Liam.Howlett@oracle.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Naveen N. Rao <naveen.n.rao@linux.ibm.com>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2024-04-25 20:56:28 -07:00
..
alpha treewide: use initializer for struct vm_unmapped_area_info 2024-04-25 20:56:27 -07:00
arc treewide: use initializer for struct vm_unmapped_area_info 2024-04-25 20:56:27 -07:00
arm treewide: use initializer for struct vm_unmapped_area_info 2024-04-25 20:56:27 -07:00
arm64 mm: convert arch_clear_hugepage_flags to take a folio 2024-04-25 20:56:15 -07:00
csky csky: use initializer for struct vm_unmapped_area_info 2024-04-25 20:56:27 -07:00
hexagon
loongarch treewide: use initializer for struct vm_unmapped_area_info 2024-04-25 20:56:27 -07:00
m68k
microblaze
mips treewide: use initializer for struct vm_unmapped_area_info 2024-04-25 20:56:27 -07:00
nios2
openrisc
parisc parisc: use initializer for struct vm_unmapped_area_info 2024-04-25 20:56:27 -07:00
powerpc powerpc: use initializer for struct vm_unmapped_area_info 2024-04-25 20:56:27 -07:00
riscv mm/arch: provide pud_pfn() fallback 2024-04-25 20:56:21 -07:00
s390 treewide: use initializer for struct vm_unmapped_area_info 2024-04-25 20:56:27 -07:00
sh treewide: use initializer for struct vm_unmapped_area_info 2024-04-25 20:56:27 -07:00
sparc treewide: use initializer for struct vm_unmapped_area_info 2024-04-25 20:56:27 -07:00
um mm: vmalloc: enable memory allocation profiling 2024-04-25 20:55:57 -07:00
x86 x86/mm: care about shadow stack guard gap during placement 2024-04-25 20:56:28 -07:00
xtensa xtensa: remove uses of PG_arch_1 on individual pages 2024-04-25 20:56:13 -07:00
.gitignore
Kconfig Kconfig: add some hidden tabs on purpose 2024-04-12 10:05:10 -07:00