[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] 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@xxxxxxxx> --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -11551,13 +11551,39 @@ x86_insn_is_mem_write(const struct x86_e 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;
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |