From: Jan Beulich Date: Wed, 19 Apr 2017 11:25:44 +0000 (+0200) Subject: x86emul: always fill x86_insn_modrm()'s outputs X-Git-Tag: 4.9.0-rc2~6 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=818ff653a7afa51e11631e4ed373f70fd45e3a21;p=xen.git x86emul: always fill x86_insn_modrm()'s outputs The function is rather unlikely to be called for insns which don't have ModRM bytes, and hence addressing Coverity's recurring complaint of callers potentially consuming uninitialized data when they know that certain opcodes have ModRM bytes can be suppressed this way without unduly adding overhead to fast paths. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper Release-acked-by: Julien Grall --- diff --git a/xen/arch/x86/x86_emulate/x86_emulate.c b/xen/arch/x86/x86_emulate/x86_emulate.c index 6f1076148e..c822221d8a 100644 --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -8017,8 +8017,14 @@ x86_insn_modrm(const struct x86_emulate_state *state, { check_state(state); - if ( state->modrm_mod > 3 ) + if ( unlikely(state->modrm_mod > 3) ) + { + if ( rm ) + *rm = ~0U; + if ( reg ) + *reg = ~0U; return -EINVAL; + } if ( rm ) *rm = state->modrm_rm;