Path: blob/master/arch/arm64/include/asm/asm_pointer_auth.h
26481 views
/* SPDX-License-Identifier: GPL-2.0 */1#ifndef __ASM_ASM_POINTER_AUTH_H2#define __ASM_ASM_POINTER_AUTH_H34#include <asm/alternative.h>5#include <asm/asm-offsets.h>6#include <asm/cpufeature.h>7#include <asm/sysreg.h>89#ifdef CONFIG_ARM64_PTR_AUTH_KERNEL1011.macro __ptrauth_keys_install_kernel_nosync tsk, tmp1, tmp2, tmp312mov \tmp1, #THREAD_KEYS_KERNEL13add \tmp1, \tsk, \tmp114ldp \tmp2, \tmp3, [\tmp1, #PTRAUTH_KERNEL_KEY_APIA]15msr_s SYS_APIAKEYLO_EL1, \tmp216msr_s SYS_APIAKEYHI_EL1, \tmp317.endm1819.macro ptrauth_keys_install_kernel_nosync tsk, tmp1, tmp2, tmp320alternative_if ARM64_HAS_ADDRESS_AUTH21__ptrauth_keys_install_kernel_nosync \tsk, \tmp1, \tmp2, \tmp322alternative_else_nop_endif23.endm2425.macro ptrauth_keys_install_kernel tsk, tmp1, tmp2, tmp326alternative_if ARM64_HAS_ADDRESS_AUTH27__ptrauth_keys_install_kernel_nosync \tsk, \tmp1, \tmp2, \tmp328isb29alternative_else_nop_endif30.endm3132#else /* CONFIG_ARM64_PTR_AUTH_KERNEL */3334.macro __ptrauth_keys_install_kernel_nosync tsk, tmp1, tmp2, tmp335.endm3637.macro ptrauth_keys_install_kernel_nosync tsk, tmp1, tmp2, tmp338.endm3940.macro ptrauth_keys_install_kernel tsk, tmp1, tmp2, tmp341.endm4243#endif /* CONFIG_ARM64_PTR_AUTH_KERNEL */4445#ifdef CONFIG_ARM64_PTR_AUTH46/*47* thread.keys_user.ap* as offset exceeds the #imm offset range48* so use the base value of ldp as thread.keys_user and offset as49* thread.keys_user.ap*.50*/51.macro __ptrauth_keys_install_user tsk, tmp1, tmp2, tmp352mov \tmp1, #THREAD_KEYS_USER53add \tmp1, \tsk, \tmp154ldp \tmp2, \tmp3, [\tmp1, #PTRAUTH_USER_KEY_APIA]55msr_s SYS_APIAKEYLO_EL1, \tmp256msr_s SYS_APIAKEYHI_EL1, \tmp357.endm5859.macro __ptrauth_keys_init_cpu tsk, tmp1, tmp2, tmp360mrs \tmp1, id_aa64isar1_el161ubfx \tmp1, \tmp1, #ID_AA64ISAR1_EL1_APA_SHIFT, #862mrs_s \tmp2, SYS_ID_AA64ISAR2_EL163ubfx \tmp2, \tmp2, #ID_AA64ISAR2_EL1_APA3_SHIFT, #464orr \tmp1, \tmp1, \tmp265cbz \tmp1, .Lno_addr_auth\@66mov_q \tmp1, (SCTLR_ELx_ENIA | SCTLR_ELx_ENIB | \67SCTLR_ELx_ENDA | SCTLR_ELx_ENDB)68mrs \tmp2, sctlr_el169orr \tmp2, \tmp2, \tmp170msr sctlr_el1, \tmp271__ptrauth_keys_install_kernel_nosync \tsk, \tmp1, \tmp2, \tmp372isb73.Lno_addr_auth\@:74.endm7576.macro ptrauth_keys_init_cpu tsk, tmp1, tmp2, tmp377alternative_if_not ARM64_HAS_ADDRESS_AUTH78b .Lno_addr_auth\@79alternative_else_nop_endif80__ptrauth_keys_init_cpu \tsk, \tmp1, \tmp2, \tmp381.Lno_addr_auth\@:82.endm8384#else /* !CONFIG_ARM64_PTR_AUTH */8586.macro ptrauth_keys_install_user tsk, tmp1, tmp2, tmp387.endm8889#endif /* CONFIG_ARM64_PTR_AUTH */9091#endif /* __ASM_ASM_POINTER_AUTH_H */929394