KVM: x86 emulator: If LOCK prefix is used dest arg should be memory.
authorGleb Natapov <gleb@redhat.com>
Thu, 18 Mar 2010 13:20:14 +0000 (15:20 +0200)
committerAvi Kivity <avi@redhat.com>
Mon, 17 May 2010 09:16:11 +0000 (12:16 +0300)
If LOCK prefix is used dest arg should be memory, otherwise instruction
should generate #UD.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
arch/x86/kvm/emulate.c

index b89a8f21733255d58e44caa59e4034a76cdba48a..46a7ee3040a02ca540e571828515b4f8a0e999de 100644 (file)
@@ -1842,7 +1842,7 @@ x86_emulate_insn(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops)
        }
 
        /* LOCK prefix is allowed only with some instructions */
-       if (c->lock_prefix && !(c->d & Lock)) {
+       if (c->lock_prefix && (!(c->d & Lock) || c->dst.type != OP_MEM)) {
                kvm_queue_exception(ctxt->vcpu, UD_VECTOR);
                goto done;
        }