[PATCH] KVM: arm64: nv: Properly check ESR_EL2.VNCR on taking a VNCR_EL2 related fault
Joey Gouly
joey.gouly at arm.com
Thu Jul 31 03:07:54 PDT 2025
On Wed, Jul 30, 2025 at 11:18:28AM +0100, Marc Zyngier wrote:
> Instead of checking for the ESR_EL2.VNCR bit being set (the only case
> we should be here), we are actually testing random bits in ESR_EL2.DFSC.
>
> 13 obviously being a lucky number, it matches both permission and
> translation fault status codes, which explains why we never saw it
> failing. This was found by inspection, while reviewing a vaguely
> related patch.
>
> Whilst we're at it, turn the BUG_ON() into a WARN_ON_ONCE(), as
> exploding here is just silly.
>
> Fixes: 069a05e535496 ("KVM: arm64: nv: Handle VNCR_EL2-triggered faults")
> Signed-off-by: Marc Zyngier <maz at kernel.org>
Good spot!
Reviewed-by: Joey Gouly <joey.gouly at arm.com>
> ---
> arch/arm64/kvm/nested.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm64/kvm/nested.c b/arch/arm64/kvm/nested.c
> index c6a4e8f384ac6..046dcfc8bf76b 100644
> --- a/arch/arm64/kvm/nested.c
> +++ b/arch/arm64/kvm/nested.c
> @@ -1287,7 +1287,7 @@ int kvm_handle_vncr_abort(struct kvm_vcpu *vcpu)
> struct vncr_tlb *vt = vcpu->arch.vncr_tlb;
> u64 esr = kvm_vcpu_get_esr(vcpu);
>
> - BUG_ON(!(esr & ESR_ELx_VNCR_SHIFT));
> + WARN_ON_ONCE(!(esr & ESR_ELx_VNCR));
>
> if (esr_fsc_is_permission_fault(esr)) {
> inject_vncr_perm(vcpu);
> --
> 2.39.2
>
More information about the linux-arm-kernel
mailing list