arm64: Defer enabling pointer authentication on boot core
Defer enabling pointer authentication on boot core until after its required to be enabled by cpufeature framework. This will help in controlling the feature dynamically with a boot parameter. Signed-off-by: Ajay Patil <pajay@qti.qualcomm.com> Signed-off-by: Prasad Sodagudi <psodagud@codeaurora.org> Signed-off-by: Srinivas Ramana <sramana@codeaurora.org> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/1610152163-16554-2-git-send-email-sramana@codeaurora.org Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Acked-by: David Brazdil <dbrazdil@google.com> Link: https://lore.kernel.org/r/20210208095732.3267263-22-maz@kernel.org Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
parent
93ad55b785
commit
7f6240858c
@ -76,6 +76,15 @@ static inline unsigned long ptrauth_strip_insn_pac(unsigned long ptr)
|
|||||||
return ptrauth_clear_pac(ptr);
|
return ptrauth_clear_pac(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __always_inline void ptrauth_enable(void)
|
||||||
|
{
|
||||||
|
if (!system_supports_address_auth())
|
||||||
|
return;
|
||||||
|
sysreg_clear_set(sctlr_el1, 0, (SCTLR_ELx_ENIA | SCTLR_ELx_ENIB |
|
||||||
|
SCTLR_ELx_ENDA | SCTLR_ELx_ENDB));
|
||||||
|
isb();
|
||||||
|
}
|
||||||
|
|
||||||
#define ptrauth_thread_init_user(tsk) \
|
#define ptrauth_thread_init_user(tsk) \
|
||||||
ptrauth_keys_init_user(&(tsk)->thread.keys_user)
|
ptrauth_keys_init_user(&(tsk)->thread.keys_user)
|
||||||
#define ptrauth_thread_init_kernel(tsk) \
|
#define ptrauth_thread_init_kernel(tsk) \
|
||||||
@ -84,6 +93,7 @@ static inline unsigned long ptrauth_strip_insn_pac(unsigned long ptr)
|
|||||||
ptrauth_keys_switch_kernel(&(tsk)->thread.keys_kernel)
|
ptrauth_keys_switch_kernel(&(tsk)->thread.keys_kernel)
|
||||||
|
|
||||||
#else /* CONFIG_ARM64_PTR_AUTH */
|
#else /* CONFIG_ARM64_PTR_AUTH */
|
||||||
|
#define ptrauth_enable()
|
||||||
#define ptrauth_prctl_reset_keys(tsk, arg) (-EINVAL)
|
#define ptrauth_prctl_reset_keys(tsk, arg) (-EINVAL)
|
||||||
#define ptrauth_strip_insn_pac(lr) (lr)
|
#define ptrauth_strip_insn_pac(lr) (lr)
|
||||||
#define ptrauth_thread_init_user(tsk)
|
#define ptrauth_thread_init_user(tsk)
|
||||||
|
@ -41,6 +41,7 @@ static __always_inline void boot_init_stack_canary(void)
|
|||||||
#endif
|
#endif
|
||||||
ptrauth_thread_init_kernel(current);
|
ptrauth_thread_init_kernel(current);
|
||||||
ptrauth_thread_switch_kernel(current);
|
ptrauth_thread_switch_kernel(current);
|
||||||
|
ptrauth_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* _ASM_STACKPROTECTOR_H */
|
#endif /* _ASM_STACKPROTECTOR_H */
|
||||||
|
@ -404,10 +404,6 @@ SYM_FUNC_START_LOCAL(__primary_switched)
|
|||||||
adr_l x5, init_task
|
adr_l x5, init_task
|
||||||
msr sp_el0, x5 // Save thread_info
|
msr sp_el0, x5 // Save thread_info
|
||||||
|
|
||||||
#ifdef CONFIG_ARM64_PTR_AUTH
|
|
||||||
__ptrauth_keys_init_cpu x5, x6, x7, x8
|
|
||||||
#endif
|
|
||||||
|
|
||||||
adr_l x8, vectors // load VBAR_EL1 with virtual
|
adr_l x8, vectors // load VBAR_EL1 with virtual
|
||||||
msr vbar_el1, x8 // vector table address
|
msr vbar_el1, x8 // vector table address
|
||||||
isb
|
isb
|
||||||
|
Loading…
Reference in New Issue
Block a user