Commit e51f5f56 authored by Amit Daniel Kachhap's avatar Amit Daniel Kachhap Committed by Catalin Marinas

arm64: suspend: restore the kernel ptrauth keys

This patch restores the kernel keys from current task during cpu resume
after the mmu is turned on and ptrauth is enabled.

A flag is added in macro ptrauth_keys_install_kernel to check if isb
instruction needs to be executed.
Signed-off-by: default avatarAmit Daniel Kachhap <amit.kachhap@arm.com>
Reviewed-by: default avatarVincenzo Frascino <Vincenzo.Frascino@arm.com>
Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent cdcb61ae
...@@ -39,14 +39,16 @@ alternative_if ARM64_HAS_GENERIC_AUTH ...@@ -39,14 +39,16 @@ alternative_if ARM64_HAS_GENERIC_AUTH
alternative_else_nop_endif alternative_else_nop_endif
.endm .endm
.macro ptrauth_keys_install_kernel tsk, tmp1, tmp2, tmp3 .macro ptrauth_keys_install_kernel tsk, sync, tmp1, tmp2, tmp3
alternative_if ARM64_HAS_ADDRESS_AUTH alternative_if ARM64_HAS_ADDRESS_AUTH
mov \tmp1, #THREAD_KEYS_KERNEL mov \tmp1, #THREAD_KEYS_KERNEL
add \tmp1, \tsk, \tmp1 add \tmp1, \tsk, \tmp1
ldp \tmp2, \tmp3, [\tmp1, #PTRAUTH_KERNEL_KEY_APIA] ldp \tmp2, \tmp3, [\tmp1, #PTRAUTH_KERNEL_KEY_APIA]
msr_s SYS_APIAKEYLO_EL1, \tmp2 msr_s SYS_APIAKEYLO_EL1, \tmp2
msr_s SYS_APIAKEYHI_EL1, \tmp3 msr_s SYS_APIAKEYHI_EL1, \tmp3
.if \sync == 1
isb isb
.endif
alternative_else_nop_endif alternative_else_nop_endif
.endm .endm
...@@ -55,7 +57,7 @@ alternative_else_nop_endif ...@@ -55,7 +57,7 @@ alternative_else_nop_endif
.macro ptrauth_keys_install_user tsk, tmp1, tmp2, tmp3 .macro ptrauth_keys_install_user tsk, tmp1, tmp2, tmp3
.endm .endm
.macro ptrauth_keys_install_kernel tsk, tmp1, tmp2, tmp3 .macro ptrauth_keys_install_kernel tsk, sync, tmp1, tmp2, tmp3
.endm .endm
#endif /* CONFIG_ARM64_PTR_AUTH */ #endif /* CONFIG_ARM64_PTR_AUTH */
......
...@@ -178,7 +178,7 @@ alternative_cb_end ...@@ -178,7 +178,7 @@ alternative_cb_end
apply_ssbd 1, x22, x23 apply_ssbd 1, x22, x23
ptrauth_keys_install_kernel tsk, x20, x22, x23 ptrauth_keys_install_kernel tsk, 1, x20, x22, x23
.else .else
add x21, sp, #S_FRAME_SIZE add x21, sp, #S_FRAME_SIZE
get_current_task tsk get_current_task tsk
...@@ -900,7 +900,7 @@ ENTRY(cpu_switch_to) ...@@ -900,7 +900,7 @@ ENTRY(cpu_switch_to)
ldr lr, [x8] ldr lr, [x8]
mov sp, x9 mov sp, x9
msr sp_el0, x1 msr sp_el0, x1
ptrauth_keys_install_kernel x1, x8, x9, x10 ptrauth_keys_install_kernel x1, 1, x8, x9, x10
ret ret
ENDPROC(cpu_switch_to) ENDPROC(cpu_switch_to)
NOKPROBE(cpu_switch_to) NOKPROBE(cpu_switch_to)
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <linux/linkage.h> #include <linux/linkage.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/asm_pointer_auth.h>
#include <asm/hwcap.h> #include <asm/hwcap.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/pgtable-hwdef.h> #include <asm/pgtable-hwdef.h>
...@@ -137,6 +138,7 @@ alternative_if ARM64_HAS_RAS_EXTN ...@@ -137,6 +138,7 @@ alternative_if ARM64_HAS_RAS_EXTN
msr_s SYS_DISR_EL1, xzr msr_s SYS_DISR_EL1, xzr
alternative_else_nop_endif alternative_else_nop_endif
ptrauth_keys_install_kernel x14, 0, x1, x2, x3
isb isb
ret ret
SYM_FUNC_END(cpu_do_resume) SYM_FUNC_END(cpu_do_resume)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment