diff options
author | Gleb Natapov <gleb@redhat.com> | 2010-03-18 09:20:07 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2010-05-17 05:16:00 -0400 |
commit | 5e3ae6c5407ffb23bc4d9871e09d1b222e1b31a4 (patch) | |
tree | 47682155db04fa7aa584f2b8237f136aa54305b9 /arch/x86/kvm/emulate.c | |
parent | 063db061b9b3472c925f09ae3a0a8359b80c2295 (diff) |
KVM: x86 emulator: fix mov r/m, sreg emulation.
mov r/m, sreg generates #UD ins sreg is incorrect.
Signed-off-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'arch/x86/kvm/emulate.c')
-rw-r--r-- | arch/x86/kvm/emulate.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index 2c27aa466cf4..c3b9334eb248 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c | |||
@@ -2126,12 +2126,11 @@ special_insn: | |||
2126 | case 0x8c: { /* mov r/m, sreg */ | 2126 | case 0x8c: { /* mov r/m, sreg */ |
2127 | struct kvm_segment segreg; | 2127 | struct kvm_segment segreg; |
2128 | 2128 | ||
2129 | if (c->modrm_reg <= 5) | 2129 | if (c->modrm_reg <= VCPU_SREG_GS) |
2130 | kvm_get_segment(ctxt->vcpu, &segreg, c->modrm_reg); | 2130 | kvm_get_segment(ctxt->vcpu, &segreg, c->modrm_reg); |
2131 | else { | 2131 | else { |
2132 | printk(KERN_INFO "0x8c: Invalid segreg in modrm byte 0x%02x\n", | 2132 | kvm_queue_exception(ctxt->vcpu, UD_VECTOR); |
2133 | c->modrm); | 2133 | goto done; |
2134 | goto cannot_emulate; | ||
2135 | } | 2134 | } |
2136 | c->dst.val = segreg.selector; | 2135 | c->dst.val = segreg.selector; |
2137 | break; | 2136 | break; |