• Mark Brown's avatar
    mm: care about shadow stack guard gap when getting an unmapped area · df7e1286
    Mark Brown authored
    As covered in the commit log for c44357c2 ("x86/mm: care about shadow
    stack guard gap during placement") our current mmap() implementation does
    not take care to ensure that a new mapping isn't placed with existing
    mappings inside it's own guard gaps.  This is particularly important for
    shadow stacks since if two shadow stacks end up getting placed adjacent to
    each other then they can overflow into each other which weakens the
    protection offered by the feature.
    
    On x86 there is a custom arch_get_unmapped_area() which was updated by the
    above commit to cover this case by specifying a start_gap for allocations
    with VM_SHADOW_STACK.  Both arm64 and RISC-V have equivalent features and
    use the generic implementation of arch_get_unmapped_area() so let's make
    the equivalent change there so they also don't get shadow stack pages
    placed without guard pages.  x86 uses a single page guard, this is also
    sufficient for arm64 where we either do single word pops and pushes or
    unconstrained writes.
    
    Architectures which do not have this feature will define VM_SHADOW_STACK
    to VM_NONE and hence be unaffected.
    
    Link: https://lkml.kernel.org/r/20240904-mm-generic-shadow-stack-guard-v2-3-a46b8b6dc0ed@kernel.orgSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    Suggested-by: default avatarRick Edgecombe <rick.p.edgecombe@intel.com>
    Acked-by: default avatarLorenzo Stoakes <lorenzo.stoakes@oracle.com>
    Cc: Alexander Gordeev <agordeev@linux.ibm.com>
    Cc: Andreas Larsson <andreas@gaisler.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Christian Borntraeger <borntraeger@linux.ibm.com>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Chris Zankel <chris@zankel.net>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
    Cc: Guo Ren <guoren@kernel.org>
    Cc: Heiko Carstens <hca@linux.ibm.com>
    Cc: Helge Deller <deller@gmx.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Huacai Chen <chenhuacai@kernel.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
    Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
    Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Cc: Liam R. Howlett <Liam.Howlett@Oracle.com>
    Cc: Matt Turner <mattst88@gmail.com>
    Cc: Max Filippov <jcmvbkbc@gmail.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Naveen N Rao <naveen@kernel.org>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Richard Henderson <richard.henderson@linaro.org>
    Cc: Rich Felker <dalias@libc.org>
    Cc: Russell King <linux@armlinux.org.uk>
    Cc: Sven Schnelle <svens@linux.ibm.com>
    Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Cc: Vineet Gupta <vgupta@kernel.org>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: WANG Xuerui <kernel@xen0n.name>
    Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    df7e1286
mmap.c 60.1 KB