• Amit Daniel Kachhap's avatar
    arm64: mask PAC bits of __builtin_return_address · 689eae42
    Amit Daniel Kachhap authored
    Functions like vmap() record how much memory has been allocated by their
    callers, and callers are identified using __builtin_return_address(). Once
    the kernel is using pointer-auth the return address will be signed. This
    means it will not match any kernel symbol, and will vary between threads
    even for the same caller.
    
    The output of /proc/vmallocinfo in this case may look like,
    0x(____ptrval____)-0x(____ptrval____)   20480 0x86e28000100e7c60 pages=4 vmalloc N0=4
    0x(____ptrval____)-0x(____ptrval____)   20480 0x86e28000100e7c60 pages=4 vmalloc N0=4
    0x(____ptrval____)-0x(____ptrval____)   20480 0xc5c78000100e7c60 pages=4 vmalloc N0=4
    
    The above three 64bit values should be the same symbol name and not
    different LR values.
    
    Use the pre-processor to add logic to clear the PAC to
    __builtin_return_address() callers. This patch adds a new file
    asm/compiler.h and is transitively included via include/compiler_types.h on
    the compiler command line so it is guaranteed to be loaded and the users of
    this macro will not find a wrong version.
    
    Helper macros ptrauth_kernel_pac_mask/ptrauth_clear_pac are created for
    this purpose and added in this file. Existing macro ptrauth_user_pac_mask
    moved from asm/pointer_auth.h.
    Signed-off-by: default avatarAmit Daniel Kachhap <amit.kachhap@arm.com>
    Reviewed-by: default avatarJames Morse <james.morse@arm.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    689eae42
compiler.h 803 Bytes