cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

asm_pointer_auth.h (2541B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __ASM_ASM_POINTER_AUTH_H
      3#define __ASM_ASM_POINTER_AUTH_H
      4
      5#include <asm/alternative.h>
      6#include <asm/asm-offsets.h>
      7#include <asm/cpufeature.h>
      8#include <asm/sysreg.h>
      9
     10#ifdef CONFIG_ARM64_PTR_AUTH_KERNEL
     11
     12	.macro __ptrauth_keys_install_kernel_nosync tsk, tmp1, tmp2, tmp3
     13	mov	\tmp1, #THREAD_KEYS_KERNEL
     14	add	\tmp1, \tsk, \tmp1
     15	ldp	\tmp2, \tmp3, [\tmp1, #PTRAUTH_KERNEL_KEY_APIA]
     16	msr_s	SYS_APIAKEYLO_EL1, \tmp2
     17	msr_s	SYS_APIAKEYHI_EL1, \tmp3
     18	.endm
     19
     20	.macro ptrauth_keys_install_kernel_nosync tsk, tmp1, tmp2, tmp3
     21alternative_if ARM64_HAS_ADDRESS_AUTH
     22	__ptrauth_keys_install_kernel_nosync \tsk, \tmp1, \tmp2, \tmp3
     23alternative_else_nop_endif
     24	.endm
     25
     26	.macro ptrauth_keys_install_kernel tsk, tmp1, tmp2, tmp3
     27alternative_if ARM64_HAS_ADDRESS_AUTH
     28	__ptrauth_keys_install_kernel_nosync \tsk, \tmp1, \tmp2, \tmp3
     29	isb
     30alternative_else_nop_endif
     31	.endm
     32
     33#else /* CONFIG_ARM64_PTR_AUTH_KERNEL */
     34
     35	.macro __ptrauth_keys_install_kernel_nosync tsk, tmp1, tmp2, tmp3
     36	.endm
     37
     38	.macro ptrauth_keys_install_kernel_nosync tsk, tmp1, tmp2, tmp3
     39	.endm
     40
     41	.macro ptrauth_keys_install_kernel tsk, tmp1, tmp2, tmp3
     42	.endm
     43
     44#endif /* CONFIG_ARM64_PTR_AUTH_KERNEL */
     45
     46#ifdef CONFIG_ARM64_PTR_AUTH
     47/*
     48 * thread.keys_user.ap* as offset exceeds the #imm offset range
     49 * so use the base value of ldp as thread.keys_user and offset as
     50 * thread.keys_user.ap*.
     51 */
     52	.macro __ptrauth_keys_install_user tsk, tmp1, tmp2, tmp3
     53	mov	\tmp1, #THREAD_KEYS_USER
     54	add	\tmp1, \tsk, \tmp1
     55	ldp	\tmp2, \tmp3, [\tmp1, #PTRAUTH_USER_KEY_APIA]
     56	msr_s	SYS_APIAKEYLO_EL1, \tmp2
     57	msr_s	SYS_APIAKEYHI_EL1, \tmp3
     58	.endm
     59
     60	.macro __ptrauth_keys_init_cpu tsk, tmp1, tmp2, tmp3
     61	mrs	\tmp1, id_aa64isar1_el1
     62	ubfx	\tmp1, \tmp1, #ID_AA64ISAR1_APA_SHIFT, #8
     63	mrs_s	\tmp2, SYS_ID_AA64ISAR2_EL1
     64	ubfx	\tmp2, \tmp2, #ID_AA64ISAR2_APA3_SHIFT, #4
     65	orr	\tmp1, \tmp1, \tmp2
     66	cbz	\tmp1, .Lno_addr_auth\@
     67	mov_q	\tmp1, (SCTLR_ELx_ENIA | SCTLR_ELx_ENIB | \
     68			SCTLR_ELx_ENDA | SCTLR_ELx_ENDB)
     69	mrs	\tmp2, sctlr_el1
     70	orr	\tmp2, \tmp2, \tmp1
     71	msr	sctlr_el1, \tmp2
     72	__ptrauth_keys_install_kernel_nosync \tsk, \tmp1, \tmp2, \tmp3
     73	isb
     74.Lno_addr_auth\@:
     75	.endm
     76
     77	.macro ptrauth_keys_init_cpu tsk, tmp1, tmp2, tmp3
     78alternative_if_not ARM64_HAS_ADDRESS_AUTH
     79	b	.Lno_addr_auth\@
     80alternative_else_nop_endif
     81	__ptrauth_keys_init_cpu \tsk, \tmp1, \tmp2, \tmp3
     82.Lno_addr_auth\@:
     83	.endm
     84
     85#else /* !CONFIG_ARM64_PTR_AUTH */
     86
     87	.macro ptrauth_keys_install_user tsk, tmp1, tmp2, tmp3
     88	.endm
     89
     90#endif /* CONFIG_ARM64_PTR_AUTH */
     91
     92#endif /* __ASM_ASM_POINTER_AUTH_H */