Skip to content

Commit 798eb59

Browse files
Fuad Tabbaoupton
authored andcommitted
KVM: arm64: Sync protected guest VBAR_EL1 on injecting an undef exception
In pKVM, a race condition can occur if a guest updates its VBAR_EL1 register and, before a vCPU exit synchronizes this change, the hypervisor needs to inject an undefined exception into a protected guest. In this scenario, the vCPU still holds the stale VBAR_EL1 value from before the guest's update. When pKVM injects the exception, it ends up using the stale value. Explicitly 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. Reported-by: Keir Fraser <keirf@google.com> Signed-off-by: Fuad Tabba <tabba@google.com> Link: https://lore.kernel.org/r/20250807120133.871892-3-tabba@google.com Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
1 parent eaa4393 commit 798eb59

File tree

1 file changed

+1
-0
lines changed

1 file changed

+1
-0
lines changed

arch/arm64/kvm/hyp/nvhe/sys_regs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ static void inject_undef64(struct kvm_vcpu *vcpu)
253253

254254
*vcpu_pc(vcpu) = read_sysreg_el2(SYS_ELR);
255255
*vcpu_cpsr(vcpu) = read_sysreg_el2(SYS_SPSR);
256+
__vcpu_assign_sys_reg(vcpu, read_sysreg_el1(SYS_VBAR), VBAR_EL1);
256257

257258
kvm_pend_exception(vcpu, EXCEPT_AA64_EL1_SYNC);
258259

0 commit comments

Comments
 (0)