• Peter Collingbourne's avatar
    arm64: Introduce prctl(PR_PAC_{SET,GET}_ENABLED_KEYS) · 20169862
    Peter Collingbourne authored
    This change introduces a prctl that allows the user program to control
    which PAC keys are enabled in a particular task. The main reason
    why this is useful is to enable a userspace ABI that uses PAC to
    sign and authenticate function pointers and other pointers exposed
    outside of the function, while still allowing binaries conforming
    to the ABI to interoperate with legacy binaries that do not sign or
    authenticate pointers.
    
    The idea is that a dynamic loader or early startup code would issue
    this prctl very early after establishing that a process may load legacy
    binaries, but before executing any PAC instructions.
    
    This change adds a small amount of overhead to kernel entry and exit
    due to additional required instruction sequences.
    
    On a DragonBoard 845c (Cortex-A75) with the powersave governor, the
    overhead of similar instruction sequences was measured as 4.9ns when
    simulating the common case where IA is left enabled, or 43.7ns when
    simulating the uncommon case where IA is disabled. These numbers can
    be seen as the worst case scenario, since in more realistic scenarios
    a better performing governor would be used and a newer chip would be
    used that would support PAC unlike Cortex-A75 and would be expected
    to be faster than Cortex-A75.
    
    On an Apple M1 under a hypervisor, the overhead of the entry/exit
    instruction sequences introduced by this patch was measured as 0.3ns
    in the case where IA is left enabled, and 33.0ns in the case where
    IA is disabled.
    Signed-off-by: default avatarPeter Collingbourne <pcc@google.com>
    Reviewed-by: default avatarDave Martin <Dave.Martin@arm.com>
    Link: https://linux-review.googlesource.com/id/Ibc41a5e6a76b275efbaa126b31119dc197b927a5
    Link: https://lore.kernel.org/r/d6609065f8f40397a4124654eb68c9f490b4d477.1616123271.git.pcc@google.comSigned-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    20169862
processor.h 9.39 KB