aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGleb Natapov <gleb@redhat.com>2010-03-18 09:20:07 -0400
committerAvi Kivity <avi@redhat.com>2010-05-17 05:16:00 -0400
commit5e3ae6c5407ffb23bc4d9871e09d1b222e1b31a4 (patch)
tree47682155db04fa7aa584f2b8237f136aa54305b9
parent063db061b9b3472c925f09ae3a0a8359b80c2295 (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>
-rw-r--r--arch/x86/kvm/emulate.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index 2c27aa466cf..c3b9334eb24 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;