mm/mmap: Add shadow stack pages to memory accounting

The x86 Control-flow Enforcement Technology (CET) feature includes a new
type of memory called shadow stack. This shadow stack memory has some
unusual properties, which requires some core mm changes to function
properly.

Co-developed-by: Yu-cheng Yu <yu-cheng.yu@intel.com>
Signed-off-by: Yu-cheng Yu <yu-cheng.yu@intel.com>
Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Reviewed-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Kees Cook <keescook@chromium.org>
Acked-by: Mike Rapoport (IBM) <rppt@kernel.org>
Acked-by: David Hildenbrand <david@redhat.com>
Tested-by: Pengfei Xu <pengfei.xu@intel.com>
Tested-by: John Allen <john.allen@amd.com>
Tested-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/all/20230613001108.3040476-20-rick.p.edgecombe%40intel.com
This commit is contained in:
Rick Edgecombe
2023-06-12 17:10:45 -07:00
parent ae1f05a617
commit 00547ef73f

View File

@@ -538,14 +538,14 @@ static inline bool is_exec_mapping(vm_flags_t flags)
} }
/* /*
* Stack area - automatically grows in one direction * Stack area (including shadow stacks)
* *
* VM_GROWSUP / VM_GROWSDOWN VMAs are always private anonymous: * VM_GROWSUP / VM_GROWSDOWN VMAs are always private anonymous:
* do_mmap() forbids all other combinations. * do_mmap() forbids all other combinations.
*/ */
static inline bool is_stack_mapping(vm_flags_t flags) static inline bool is_stack_mapping(vm_flags_t flags)
{ {
return (flags & VM_STACK) == VM_STACK; return ((flags & VM_STACK) == VM_STACK) || (flags & VM_SHADOW_STACK);
} }
/* /*