Skip to content
  • Masami Hiramatsu's avatar
    kprobes/x86: Support kprobes jump optimization on x86 · c0f7ac3a
    Masami Hiramatsu authored
    
    
    Introduce x86 arch-specific optimization code, which supports
    both of x86-32 and x86-64.
    
    This code also supports safety checking, which decodes whole of
    a function in which probe is inserted, and checks following
    conditions before optimization:
     - The optimized instructions which will be replaced by a jump instruction
       don't straddle the function boundary.
     - There is no indirect jump instruction, because it will jumps into
       the address range which is replaced by jump operand.
     - There is no jump/loop instruction which jumps into the address range
       which is replaced by jump operand.
     - Don't optimize kprobes if it is in functions into which fixup code will
       jumps.
    
    This uses text_poke_multibyte() which doesn't support modifying
    code on NMI/MCE handler. However, since kprobes itself doesn't
    support NMI/MCE code probing, it's not a problem.
    
    Changes in v9:
     - Use *_text_reserved() for checking the probe can be optimized.
     - Verify jump address range is in 2G range when preparing slot.
     - Backup original code when switching optimized buffer, instead of
       preparing buffer, because there can be int3 of other probes in
       preparing phase.
     - Check kprobe is disabled in arch_check_optimized_kprobe().
     - Strictly check indirect jump opcodes (ff /4, ff /5).
    
    Changes in v6:
     - Split stop_machine-based jump patching code.
     - Update comments and coding style.
    
    Changes in v5:
     - Introduce stop_machine-based jump replacing.
    
    Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
    Cc: systemtap <systemtap@sources.redhat.com>
    Cc: DLE <dle-develop@lists.sourceforge.net>
    Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
    Cc: Jim Keniston <jkenisto@us.ibm.com>
    Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
    Cc: Christoph Hellwig <hch@infradead.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Anders Kaseorg <andersk@ksplice.com>
    Cc: Tim Abbott <tabbott@ksplice.com>
    Cc: Andi Kleen <andi@firstfloor.org>
    Cc: Jason Baron <jbaron@redhat.com>
    Cc: Mathieu Desnoyers <compudj@krystal.dyndns.org>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
    LKML-Reference: <20100225133446.6725.78994.stgit@localhost6.localdomain6>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    c0f7ac3a