Skip to content

Commit 019f3f8

Browse files
committed
KVM: x86: Get RIP from vCPU state when storing it to last_retry_eip
Read RIP from vCPU state instead of pulling it from the emulation context when filling last_retry_eip, which is part of the anti-infinite-loop protection used when unprotecting and retrying instructions that hit a write-protected gfn. This will allow reusing the anti-infinite-loop protection in flows that never make it into the emulator. No functional change intended, as ctxt->eip is set to kvm_rip_read() in init_emulate_ctxt(), and EMULTYPE_PF emulation is mutually exclusive with EMULTYPE_NO_DECODE and EMULTYPE_SKIP, i.e. always goes through x86_decode_emulated_instruction() and hasn't advanced ctxt->eip (yet). Reviewed-by: Yuan Yao <yuan.yao@intel.com> Link: https://lore.kernel.org/r/20240831001538.336683-7-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
1 parent c1edcc4 commit 019f3f8

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

arch/x86/kvm/x86.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8971,7 +8971,7 @@ static bool retry_instruction(struct x86_emulate_ctxt *ctxt,
89718971
if (!kvm_mmu_unprotect_page(vcpu->kvm, gpa_to_gfn(gpa)))
89728972
return false;
89738973

8974-
vcpu->arch.last_retry_eip = ctxt->eip;
8974+
vcpu->arch.last_retry_eip = kvm_rip_read(vcpu);
89758975
vcpu->arch.last_retry_addr = cr2_or_gpa;
89768976
return true;
89778977
}

0 commit comments

Comments
 (0)