diff options
author | Nadav Amit <namit@cs.technion.ac.il> | 2014-04-18 07:11:34 +0300 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2014-04-23 17:47:00 -0300 |
commit | 42bf549f3c672006ba18e97152cbc563315ba4e6 (patch) | |
tree | 425357b66a7ca7d407b1320d8ba0f011db3b1fcc | |
parent | e6e39f0438bc4b0da9334ca42337775c7a00db21 (diff) | |
download | op-kernel-dev-42bf549f3c672006ba18e97152cbc563315ba4e6.zip op-kernel-dev-42bf549f3c672006ba18e97152cbc563315ba4e6.tar.gz |
KVM: x86: Processor mode may be determined incorrectly
If EFER.LMA is off, cs.l does not determine execution mode.
Currently, the emulation engine assumes differently.
Signed-off-by: Nadav Amit <namit@cs.technion.ac.il>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
-rw-r--r-- | arch/x86/kvm/x86.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index e4ccc6c..7cc6466 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -4888,7 +4888,7 @@ static void init_emulate_ctxt(struct kvm_vcpu *vcpu) ctxt->eip = kvm_rip_read(vcpu); ctxt->mode = (!is_protmode(vcpu)) ? X86EMUL_MODE_REAL : (ctxt->eflags & X86_EFLAGS_VM) ? X86EMUL_MODE_VM86 : - cs_l ? X86EMUL_MODE_PROT64 : + (cs_l && is_long_mode(vcpu)) ? X86EMUL_MODE_PROT64 : cs_db ? X86EMUL_MODE_PROT32 : X86EMUL_MODE_PROT16; ctxt->guest_mode = is_guest_mode(vcpu); |