]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
KVM: arm64: Fix parameter ordering for VBAR_EL1 assignment
authorFuad Tabba <tabba@google.com>
Mon, 8 Sep 2025 16:35:57 +0000 (17:35 +0100)
committerOliver Upton <oliver.upton@linux.dev>
Wed, 10 Sep 2025 09:56:20 +0000 (02:56 -0700)
The __vcpu_assign_sys_reg() helper expects the register ID as the second
argument and the value to be assigned as the third. However, the
existing code was passing these parameters in the incorrect order.

Fix the function call to properly read the live value of VBAR_EL1 from
the guest and update the vCPU value immediately before pending the
exception. This ensures the vCPU's value is the same as the guest's and
that the exception will be handled at the correct address upon resuming
the guest.

Fixes: 798eb5978700 ("KVM: arm64: Sync protected guest VBAR_EL1 on injecting an undef exception")
Signed-off-by: Fuad Tabba <tabba@google.com>
Link: https://lore.kernel.org/r/20250908163557.2419780-1-tabba@google.com
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
arch/arm64/kvm/hyp/nvhe/sys_regs.c

index 71d2fc97f0046a777b2e785b5cb2f6c188e183e4..82da9b03692d453bb841b70023a6311a6e55ed21 100644 (file)
@@ -253,7 +253,7 @@ static void inject_undef64(struct kvm_vcpu *vcpu)
 
        *vcpu_pc(vcpu) = read_sysreg_el2(SYS_ELR);
        *vcpu_cpsr(vcpu) = read_sysreg_el2(SYS_SPSR);
-       __vcpu_assign_sys_reg(vcpu, read_sysreg_el1(SYS_VBAR), VBAR_EL1);
+       __vcpu_assign_sys_reg(vcpu, VBAR_EL1, read_sysreg_el1(SYS_VBAR));
 
        kvm_pend_exception(vcpu, EXCEPT_AA64_EL1_SYNC);