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 de5476f..d0e2825 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),