Avi, I met a wrong address from instruction emulation, and it corrupted guest page table silently. seems it's caused by eip which has not reached next instruction. In my case, eip was pointing to immediate data of current instruction. I used below patch to fix it, but I didn't further check other logic. Can you please take a look? Thanks! -Xin diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index 6df88c7..e269d20 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c @@ -3547,9 +3547,6 @@ done_prefixes: if (memop.type == OP_MEM && c->ad_bytes != 8) memop.addr.mem.ea = (u32)memop.addr.mem.ea; - if (memop.type == OP_MEM && c->rip_relative) - memop.addr.mem.ea += c->eip; - /* * Decode and fetch the source operand: register, memory * or immediate. @@ -3704,6 +3701,9 @@ done_prefixes: } done: + if (memop.type == OP_MEM && c->rip_relative) + memop.addr.mem.ea += c->eip; + return (rc == X86EMUL_UNHANDLEABLE) ? EMULATION_FAILED : EMULATION_OK; } -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html