KVM: x86 emulator: fix handling for unemulated instructions
authorAvi Kivity <avi@redhat.com>
Sun, 25 Jul 2010 11:51:16 +0000 (14:51 +0300)
committerAvi Kivity <avi@redhat.com>
Sun, 24 Oct 2010 08:49:47 +0000 (10:49 +0200)
If an instruction is present in the decode tables but not in the execution
switch, it will be emulated as a NOP.  An example is IRET (0xcf).

Fix by adding default: labels to the execution switches.

Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
arch/x86/kvm/emulate.c

index 66ca98aafdd6a73d7eea8834d1f1c930384b8268..70e47d3593d8221da9fff53bc43ebcf7673ddca1 100644 (file)
@@ -3028,6 +3028,8 @@ special_insn:
                if (c->modrm_reg == 5)
                        goto jump_far;
                goto grp45;
+       default:
+               goto cannot_emulate;
        }
 
 writeback:
@@ -3353,6 +3355,8 @@ twobyte_insn:
                if (rc != X86EMUL_CONTINUE)
                        goto done;
                break;
+       default:
+               goto cannot_emulate;
        }
        goto writeback;