KVM: nEPT: reset PDPTR register cache on nested vmentry emulation
PATCH 1/1 KVM: nEPT: reset PDPTR register cache on nested vmentry emulation
After nested vmentry stale cache can be used to reload L2 PDPTR pointers which will cause L2 guest to fail. Fix it by invalidating cache on nested vmentry emulation.
https://bugzilla.kernel.org/show_bug.cgi?id=60830
arch/x86/kvm/vmx.c +4 -0
@@ -7765,6 +7765,10 @@ static void prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12)vmcs_write64 (GUEST_PDPTR1 , vmcs12->guest_pdptr1);vmcs_write64 (GUEST_PDPTR2 , vmcs12->guest_pdptr2);vmcs_write64 (GUEST_PDPTR3 , vmcs12->guest_pdptr3); +__clear_bit (VCPU_EXREG_PDPTR , + (unsigned long *)&vcpu->arch.regs_avail); +__clear_bit (VCPU_EXREG_PDPTR , + (unsigned long *)&vcpu->arch.regs_dirty); }kvm_register_write (vcpu,VCPU_REGS_RSP , vmcs12->guest_rsp);
--
Gleb.
Il 02/09/2013 14:25, Gleb Natapov ha scritto:
Quoted 23 lines
After nested vmentry stale cache can be used to reload L2 PDPTR pointers which will cause L2 guest to fail. Fix it by invalidating cache on nested vmentry emulation.
https://bugzilla.kernel.org/show_bug.cgi?id=60830
Signed-off-by Gleb Natapov <[email protected]>arch/x86/kvm/vmx.c +4
-1@@ -7765,6 +7765,10 @@ static void prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12)vmcs_write64 (GUEST_PDPTR1 , vmcs12->guest_pdptr1);vmcs_write64 (GUEST_PDPTR2 , vmcs12->guest_pdptr2);vmcs_write64 (GUEST_PDPTR3 , vmcs12->guest_pdptr3); +__clear_bit (VCPU_EXREG_PDPTR , + (unsigned long *)&vcpu->arch.regs_avail); +__clear_bit (VCPU_EXREG_PDPTR , + (unsigned long *)&vcpu->arch.regs_dirty); }kvm_register_write (vcpu,VCPU_REGS_RSP , vmcs12->guest_rsp); --
Quoted 6 lines
Gleb.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Applied to kvm/queue for 3.12, thanks.
Paolo