nVMX: reset rflags register cache during nested vmentry.
authorGleb Natapov <gleb@redhat.com>
Sun, 28 Jul 2013 15:31:06 +0000 (18:31 +0300)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 29 Jul 2013 07:04:22 +0000 (09:04 +0200)
During nested vmentry into vm86 mode a vcpu state is found to be incorrect
because rflags does not have VM flag set since it is read from the cache
and has L1's value instead of L2's. If emulate_invalid_guest_state=1 L0
KVM tries to emulate it, but emulation does not work for nVMX and it
never should happen anyway. Fix that by using vmx_set_rflags() to set
rflags during nested vmentry which takes care of updating register cache.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/vmx.c

index 45fd70cef88ea73834323d5c76d46e7a59bc7582..c143f4087d19032a66f1ca4d5f0613303dd0262f 100644 (file)
@@ -7409,7 +7409,7 @@ static void prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12)
                vmcs12->guest_interruptibility_info);
        vmcs_write32(GUEST_SYSENTER_CS, vmcs12->guest_sysenter_cs);
        kvm_set_dr(vcpu, 7, vmcs12->guest_dr7);
-       vmcs_writel(GUEST_RFLAGS, vmcs12->guest_rflags);
+       vmx_set_rflags(vcpu, vmcs12->guest_rflags);
        vmcs_writel(GUEST_PENDING_DBG_EXCEPTIONS,
                vmcs12->guest_pending_dbg_exceptions);
        vmcs_writel(GUEST_SYSENTER_ESP, vmcs12->guest_sysenter_esp);
This page took 0.03377 seconds and 5 git commands to generate.