mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
x86emul: extend x86_insn_is_mem_write() coverage
Several insns were missed when this function was first added. As far as
insns already supported by the emulator go - SMSW and {,V}STMXCSR were
wrongly considered r/o insns so far.
Insns like the VMX, SVM, or CET-SS ones, PTWRITE, or AMD's new SNP ones
are intentionally not covered just yet. VMPTRST is put there just to
complete the respective group.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
1 parent
fe36a173d1
commit
fc6fa977be
1 file changed
+28
-2
@@ -11551,13 +11551,39 @@ x86_insn_is_mem_write(const struct x86_emulate_state *state,
|
||||
break;
|
||||
|
||||
case X86EMUL_OPC(0x0f, 0x01):
|
||||
return !(state->modrm_reg & 6); /* SGDT / SIDT */
|
||||
switch ( state->modrm_reg & 7 )
|
||||
{
|
||||
case 0: /* SGDT */
|
||||
case 1: /* SIDT */
|
||||
case 4: /* SMSW */
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case X86EMUL_OPC(0x0f, 0xae):
|
||||
switch ( state->modrm_reg & 7 )
|
||||
{
|
||||
case 0: /* FXSAVE */
|
||||
case 3: /* {,V}STMXCSR */
|
||||
case 4: /* XSAVE */
|
||||
case 6: /* XSAVEOPT */
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case X86EMUL_OPC(0x0f, 0xba):
|
||||
return (state->modrm_reg & 7) > 4; /* BTS / BTR / BTC */
|
||||
|
||||
case X86EMUL_OPC(0x0f, 0xc7):
|
||||
return (state->modrm_reg & 7) == 1; /* CMPXCHG{8,16}B */
|
||||
switch ( state->modrm_reg & 7 )
|
||||
{
|
||||
case 1: /* CMPXCHG{8,16}B */
|
||||
case 4: /* XSAVEC */
|
||||
case 5: /* XSAVES */
|
||||
case 7: /* VMPTRST */
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||