• Mark Rutland's avatar
    arm64: avoid redundant PAC stripping in __builtin_return_address() · 9df3f508
    Mark Rutland authored
    In old versions of GCC and Clang, __builtin_return_address() did not
    strip the PAC. This was not the behaviour we desired, and so we wrapped
    this with code to strip the PAC in commit:
    
      689eae42 ("arm64: mask PAC bits of __builtin_return_address")
    
    Since then, both GCC and Clang decided that __builtin_return_address()
    *should* strip the PAC, and the existing behaviour was a bug.
    
    GCC was fixed in 11.1.0, with those fixes backported to 10.2.0, 9.4.0,
    8.5.0, but not earlier:
    
      https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94891
    
    Clang was fixed in 12.0.0, though this was not backported:
    
      https://reviews.llvm.org/D75044
    
    When using a compiler whose __builtin_return_address() strips the PAC,
    our wrapper to strip the PAC is redundant. Similarly, when pointer
    authentication is not in use within the kernel pointers will not have a
    PAC, and so there's no point stripping those pointers.
    
    To avoid this redundant work, this patch updates the
    __builtin_return_address() wrapper to only be used when in-kernel
    pointer authentication is configured and the compiler's
    __builtin_return_address() does not strip the PAC.
    
    This is a cleanup/optimization, and not a fix that requires backporting.
    Stripping a PAC should be an idempotent operation, and so redundantly
    stripping the PAC is not harmful.
    
    There should be no functional change as a result of this patch.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Cc: Amit Daniel Kachhap <amit.kachhap@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Kristina Martsenko <kristina.martsenko@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20230412160134.306148-2-mark.rutland@arm.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
    9df3f508
Kconfig 79.5 KB