• Oleg Nesterov's avatar
    uprobes: Install_breakpoint() should fail if is_swbp_insn() == T · c1914a09
    Oleg Nesterov authored
    install_breakpoint() returns -EEXIST if is_swbp_insn(orig_insn)
    == T, the caller treats this code as success.
    
    This is doubly wrong. The successful return should set
    UPROBE_COPY_INSN, but the real problem is that it shouldn't
    succeed. If the probed insn is int3 the application should get
    SIGTRAP, this won't happen with uprobe.
    
    Probably we can fix this, we can add the UPROBE_SHARED_BP flag
    and teach handle_swbp/set_orig_insn to handle this case
    correctly. But this needs some complications and we have other
    insns which can't be probed, lets make a simple fix for now.
    
    I think this needs a cleanup. UPROBE_COPY_INSN should die,
    copy_insn() should be called by alloc_uprobe().
    arch_uprobe_analyze_insn() depends on ->mm (ia32_compat) but it
    is called only once.
    Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
    Acked-by: default avatarSrikar Dronamraju <srikar@linux.vnet.ibm.com>
    Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
    Cc: Anton Arapov <anton@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/20120615154331.GA9578@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    c1914a09
uprobes.c 39.5 KB