• Masami Hiramatsu's avatar
    x86/kprobes: Use int3 instead of debug trap for single-step · 6256e668
    Masami Hiramatsu authored
    Use int3 instead of debug trap exception for single-stepping the
    probed instructions. Some instructions which change the ip
    registers or modify IF flags are emulated because those are not
    able to be single-stepped by int3 or may allow the interrupt
    while single-stepping.
    
    This actually changes the kprobes behavior.
    
    - kprobes can not probe following instructions; int3, iret,
      far jmp/call which get absolute address as immediate,
      indirect far jmp/call, indirect near jmp/call with addressing
      by memory (register-based indirect jmp/call are OK), and
      vmcall/vmlaunch/vmresume/vmxoff.
    
    - If the kprobe post_handler doesn't set before registering,
      it may not be called in some case even if you set it afterwards.
      (IOW, kprobe booster is enabled at registration, user can not
       change it)
    
    But both are rare issue, unsupported instructions will not be
    used in the kernel (or rarely used), and post_handlers are
    rarely used (I don't see it except for the test code).
    Suggested-by: default avatarAndy Lutomirski <luto@kernel.org>
    Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/161469874601.49483.11985325887166921076.stgit@devnote2
    6256e668
core.c 32.9 KB