diff mbox

KVM: nEPT: reset PDPTR register cache on nested vmentry emulation

Message ID 20130902122527.GS22899@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Gleb Natapov Sept. 2, 2013, 12:25 p.m. UTC
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 <gleb@redhat.com>
--
			Gleb.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Paolo Bonzini Sept. 12, 2013, 4:33 p.m. UTC | #1
Il 02/09/2013 14:25, Gleb Natapov ha scritto:
> 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 <gleb@redhat.com>
> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
> index 57b4e12..6f69aac 100644
> --- a/arch/x86/kvm/vmx.c
> +++ b/arch/x86/kvm/vmx.c
> @@ -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.
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

Applied to kvm/queue for 3.12, thanks.

Paolo
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 57b4e12..6f69aac 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -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);