x86_emulate: fix unintended writeback on cmp/test instructions
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 25 Jul 2008 13:00:27 +0000 (14:00 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 25 Jul 2008 13:00:27 +0000 (14:00 +0100)
This patch fixes an issue when x86_emulate is called with
force_writeback=1 set. It resulted in cmp and test instructions with
memory operands to have the mem value written back after instruction
emulation finished. This caused false alarms on writes to RO mem, and
might have caused other issues if unintended writes occured to device
registers in mmio space.

Signed-off-by: Trolle Selander <trolle.selander@eu.citrix.com>
xen/arch/x86/x86_emulate/x86_emulate.c

index 600705ff844f2bb29eacb4c43b762d6ca2bbec8f..6fc1955783953eab2080a19f703858be6eb0df76 100644 (file)
@@ -1606,6 +1606,7 @@ x86_emulate(
         dst.val = _regs.eax;
     case 0x38 ... 0x3b: cmp: /* cmp */
         emulate_2op_SrcV("cmp", src, dst, _regs.eflags);
+        dst.type = OP_NONE;
         break;
 
     case 0x62: /* bound */ {
@@ -1707,6 +1708,7 @@ x86_emulate(
         dst.val = _regs.eax;
     case 0x84 ... 0x85: test: /* test */
         emulate_2op_SrcV("test", src, dst, _regs.eflags);
+        dst.type = OP_NONE;
         break;
 
     case 0x86 ... 0x87: xchg: /* xchg */