• Denys Vlasenko's avatar
    uprobes/x86: Fix RIP-relative handling of EVEX-encoded instructions · 68187872
    Denys Vlasenko authored
    Since instruction decoder now supports EVEX-encoded instructions, two fixes
    are needed to correctly handle them in uprobes.
    
    Extended bits for MODRM.rm field need to be sanitized just like we do it
    for VEX3, to avoid encoding wrong register for register-relative access.
    
    EVEX has _two_ extended bits: b and x. Theoretically, EVEX.x should be
    ignored by the CPU (since GPRs go only up to 15, not 31), but let's be
    paranoid here: proper encoding for register-relative access
    should have EVEX.x = 1.
    
    Secondly, we should fetch vex.vvvv for EVEX too.
    This is now super easy because instruction decoder populates
    vex_prefix.bytes[2] for all flavors of (e)vex encodings, even for VEX2.
    Signed-off-by: default avatarDenys Vlasenko <dvlasenk@redhat.com>
    Acked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Acked-by: default avatarSrikar Dronamraju <srikar@linux.vnet.ibm.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Jim Keniston <jkenisto@us.ibm.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vince Weaver <vincent.weaver@maine.edu>
    Cc: linux-kernel@vger.kernel.org
    Cc: <stable@vger.kernel.org> # v4.1+
    Fixes: 8a764a87 ("x86/asm/decoder: Create artificial 3rd byte for 2-byte VEX")
    Link: http://lkml.kernel.org/r/20160811154521.20469-1-dvlasenk@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    68187872
uprobes.c 32.1 KB