KVM: x86: emulate reserved nops from 0f/18 to 0f/1f
authorPaolo Bonzini <pbonzini@redhat.com>
Fri, 15 May 2020 16:18:14 +0000 (12:18 -0400)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 5 Jun 2020 15:16:15 +0000 (11:16 -0400)
Instructions starting with 0f18 up to 0f1f are reserved nops, except those
that were assigned to MPX.  These include the endbr markers used by CET.
List them correctly in the opcode table.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/emulate.c

index de5476f8683e919f9d0c909c2e8ce048da06fe85..d0e2825ae6174c1e172ec522b5fb900a06a3064e 100644 (file)
@@ -4800,8 +4800,12 @@ static const struct opcode twobyte_table[256] = {
        GP(ModRM | DstReg | SrcMem | Mov | Sse, &pfx_0f_10_0f_11),
        GP(ModRM | DstMem | SrcReg | Mov | Sse, &pfx_0f_10_0f_11),
        N, N, N, N, N, N,
-       D(ImplicitOps | ModRM | SrcMem | NoAccess),
-       N, N, N, N, N, N, D(ImplicitOps | ModRM | SrcMem | NoAccess),
+       D(ImplicitOps | ModRM | SrcMem | NoAccess), /* 4 * prefetch + 4 * reserved NOP */
+       D(ImplicitOps | ModRM | SrcMem | NoAccess), N, N,
+       D(ImplicitOps | ModRM | SrcMem | NoAccess), /* 8 * reserved NOP */
+       D(ImplicitOps | ModRM | SrcMem | NoAccess), /* 8 * reserved NOP */
+       D(ImplicitOps | ModRM | SrcMem | NoAccess), /* 8 * reserved NOP */
+       D(ImplicitOps | ModRM | SrcMem | NoAccess), /* NOP + 7 * reserved NOP */
        /* 0x20 - 0x2F */
        DIP(ModRM | DstMem | Priv | Op3264 | NoMod, cr_read, check_cr_read),
        DIP(ModRM | DstMem | Priv | Op3264 | NoMod, dr_read, check_dr_read),