• Marc Zyngier's avatar
    KVM: arm64: AArch32: Fix spurious trapping of conditional instructions · c92e8b9e
    Marc Zyngier authored
    We recently upgraded the view of ESR_EL2 to 64bit, in keeping with
    the requirements of the architecture.
    
    However, the AArch32 emulation code was left unaudited, and the
    (already dodgy) code that triages whether a trap is spurious or not
    (because the condition code failed) broke in a subtle way:
    
    If ESR_EL2.ISS2 is ever non-zero (unlikely, but hey, this is the ARM
    architecture we're talking about), the hack that tests the top bits
    of ESR_EL2.EC will break in an interesting way.
    
    Instead, use kvm_vcpu_trap_get_class() to obtain the EC, and list
    all the possible ECs that can fail a condition code check.
    
    While we're at it, add SMC32 to the list, as it is explicitly listed
    as being allowed to trap despite failing a condition code check (as
    described in the HCR_EL2.TSC documentation).
    
    Fixes: 0b12620f ("KVM: arm64: Treat ESR_EL2 as a 64-bit register")
    Cc: stable@vger.kernel.org
    Acked-by: default avatarOliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20240524141956.1450304-4-maz@kernel.orgSigned-off-by: default avatarMarc Zyngier <maz@kernel.org>
    c92e8b9e
aarch32.c 3.73 KB