Commit 11ac16a4 authored by Marc Zyngier's avatar Marc Zyngier
Browse files

KVM: arm64: Simplify PtrAuth alternative patching



We currently decide to execute the PtrAuth save/restore code based
on a set of branches that evaluate as (ARM64_HAS_ADDRESS_AUTH_ARCH ||
ARM64_HAS_ADDRESS_AUTH_IMP_DEF). This can be easily replaced by
a much simpler test as the ARM64_HAS_ADDRESS_AUTH capability is
exactly this expression.

Suggested-by: default avatarMark Rutland <mark.rutland@arm.com>
Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
parent 655169ce
Loading
Loading
Loading
Loading
+11 −19
Original line number Diff line number Diff line
@@ -61,44 +61,36 @@

/*
 * Both ptrauth_switch_to_guest and ptrauth_switch_to_host macros will
 * check for the presence of one of the cpufeature flag
 * ARM64_HAS_ADDRESS_AUTH_ARCH or ARM64_HAS_ADDRESS_AUTH_IMP_DEF and
 * check for the presence ARM64_HAS_ADDRESS_AUTH, which is defined as
 * (ARM64_HAS_ADDRESS_AUTH_ARCH || ARM64_HAS_ADDRESS_AUTH_IMP_DEF) and
 * then proceed ahead with the save/restore of Pointer Authentication
 * key registers.
 * key registers if enabled for the guest.
 */
.macro ptrauth_switch_to_guest g_ctxt, reg1, reg2, reg3
alternative_if ARM64_HAS_ADDRESS_AUTH_ARCH
	b	1000f
alternative_if_not ARM64_HAS_ADDRESS_AUTH
	b	.L__skip_switch\@
alternative_else_nop_endif
alternative_if_not ARM64_HAS_ADDRESS_AUTH_IMP_DEF
	b	1001f
alternative_else_nop_endif
1000:
	mrs	\reg1, hcr_el2
	and	\reg1, \reg1, #(HCR_API | HCR_APK)
	cbz	\reg1, 1001f
	cbz	\reg1, .L__skip_switch\@
	add	\reg1, \g_ctxt, #CPU_APIAKEYLO_EL1
	ptrauth_restore_state	\reg1, \reg2, \reg3
1001:
.L__skip_switch\@:
.endm

.macro ptrauth_switch_to_host g_ctxt, h_ctxt, reg1, reg2, reg3
alternative_if ARM64_HAS_ADDRESS_AUTH_ARCH
	b	2000f
alternative_else_nop_endif
alternative_if_not ARM64_HAS_ADDRESS_AUTH_IMP_DEF
	b	2001f
alternative_if_not ARM64_HAS_ADDRESS_AUTH
	b	.L__skip_switch\@
alternative_else_nop_endif
2000:
	mrs	\reg1, hcr_el2
	and	\reg1, \reg1, #(HCR_API | HCR_APK)
	cbz	\reg1, 2001f
	cbz	\reg1, .L__skip_switch\@
	add	\reg1, \g_ctxt, #CPU_APIAKEYLO_EL1
	ptrauth_save_state	\reg1, \reg2, \reg3
	add	\reg1, \h_ctxt, #CPU_APIAKEYLO_EL1
	ptrauth_restore_state	\reg1, \reg2, \reg3
	isb
2001:
.L__skip_switch\@:
.endm

#else /* !CONFIG_ARM64_PTR_AUTH */