The previous rework of the early exit code to provide an EC-based
decoding tree missed the fact that we have two trap paths for
ptrauth: the instructions (EC_PAC) and the sysregs (EC_SYS64).

Rework the handlers to call the ptrauth handling code on both
paths.

Signed-off-by: Marc Zyngier <[email protected]>
---
 arch/arm64/kvm/hyp/include/hyp/switch.h | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/arch/arm64/kvm/hyp/include/hyp/switch.h 
b/arch/arm64/kvm/hyp/include/hyp/switch.h
index 481399bf9b94..4126926c3e06 100644
--- a/arch/arm64/kvm/hyp/include/hyp/switch.h
+++ b/arch/arm64/kvm/hyp/include/hyp/switch.h
@@ -282,14 +282,6 @@ static inline bool handle_tx2_tvm(struct kvm_vcpu *vcpu)
 
 static inline bool esr_is_ptrauth_trap(u32 esr)
 {
-       u32 ec = ESR_ELx_EC(esr);
-
-       if (ec == ESR_ELx_EC_PAC)
-               return true;
-
-       if (ec != ESR_ELx_EC_SYS64)
-               return false;
-
        switch (esr_sys64_to_sysreg(esr)) {
        case SYS_APIAKEYLO_EL1:
        case SYS_APIAKEYHI_EL1:
@@ -323,8 +315,7 @@ static bool kvm_hyp_handle_ptrauth(struct kvm_vcpu *vcpu, 
u64 *exit_code)
        struct kvm_cpu_context *ctxt;
        u64 val;
 
-       if (!vcpu_has_ptrauth(vcpu) ||
-           !esr_is_ptrauth_trap(kvm_vcpu_get_esr(vcpu)))
+       if (!vcpu_has_ptrauth(vcpu))
                return false;
 
        ctxt = this_cpu_ptr(&kvm_hyp_ctxt);
@@ -353,6 +344,9 @@ static bool kvm_hyp_handle_sysreg(struct kvm_vcpu *vcpu, 
u64 *exit_code)
            __vgic_v3_perform_cpuif_access(vcpu) == 1)
                return true;
 
+       if (esr_is_ptrauth_trap(kvm_vcpu_get_esr(vcpu)))
+               return kvm_hyp_handle_ptrauth(vcpu, exit_code);
+
        return false;
 }
 
-- 
2.30.2

_______________________________________________
kvmarm mailing list
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to