Il 29/08/2014 10:52, Nadav Amit ha scritto: > > Patch looks good, but where is the check that MOD == 3 in the "case > > RMExt"? Am I just not seeing it? > > This seems to be part of the “case GroupDual”. GroupDual handles it, but the EXT() macro you're using is exactly what you want: #define RMExt (4<<15) /* Opcode extension in ModRM r/m if mod == 3 */ I guess what's missing is ------------------ 8< ------------------ Subject: [PATCH] Check ModRM for RMExt Some group7 extensions are only defined for mod==3. Check this and reject emulation if mod!=3. Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index 56657b0bb3bb..d472e4d50e3c 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c @@ -4360,6 +4360,8 @@ done_prefixes: opcode = opcode.u.gdual->mod012[goffset]; break; case RMExt: + if ((ctxt->modrm >> 6) == 3) + return EMULATION_FAILED; goffset = ctxt->modrm & 7; opcode = opcode.u.group[goffset]; break; What do you think? Paolo -- 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