aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2012-08-21 10:07:07 -0400
committerMarcelo Tosatti <mtosatti@redhat.com>2012-08-27 19:02:21 -0400
commit726364202853f843a97a8ba4a7c3cd91e3aa84b7 (patch)
tree36e143c7db35bdd7c323634835d93c2ccb96afba /arch/x86/kvm
parent0afbe2f8781a812c7e501ec129eff45b21f792af (diff)
KVM: VMX: Return real real-mode segment data even if emulate_invalid_guest_state=1
emulate_invalid_guest_state=1 doesn't mean we don't munge the segments in the vmcs; we do. So we need to return the real ones (maintained by vmx_set_segment). Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'arch/x86/kvm')
-rw-r--r--arch/x86/kvm/vmx.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index fd21eb454663..0d6872621ab5 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -3108,8 +3108,7 @@ static void vmx_get_segment(struct kvm_vcpu *vcpu,
3108 if (vmx->rmode.vm86_active 3108 if (vmx->rmode.vm86_active
3109 && (seg == VCPU_SREG_TR || seg == VCPU_SREG_ES 3109 && (seg == VCPU_SREG_TR || seg == VCPU_SREG_ES
3110 || seg == VCPU_SREG_DS || seg == VCPU_SREG_FS 3110 || seg == VCPU_SREG_DS || seg == VCPU_SREG_FS
3111 || seg == VCPU_SREG_GS) 3111 || seg == VCPU_SREG_GS)) {
3112 && !emulate_invalid_guest_state) {
3113 *var = vmx->rmode.segs[seg]; 3112 *var = vmx->rmode.segs[seg];
3114 if (seg == VCPU_SREG_TR 3113 if (seg == VCPU_SREG_TR
3115 || var->selector == vmx_read_guest_seg_selector(vmx, seg)) 3114 || var->selector == vmx_read_guest_seg_selector(vmx, seg))