• Oleg Nesterov's avatar
    uprobes: Kill UPROBE_SKIP_SSTEP and can_skip_sstep() · 8a6b1732
    Oleg Nesterov authored
    UPROBE_COPY_INSN, UPROBE_SKIP_SSTEP, and uprobe->flags must die. This
    patch kills UPROBE_SKIP_SSTEP. I never understood why it was added;
    not only it doesn't help, it harms.
    
    It can only help to avoid arch_uprobe_skip_sstep() if it was already
    called before and failed. But this is ugly, if we want to know whether
    we can emulate this instruction or not we should do this analysis in
    arch_uprobe_analyze_insn(), not when we hit this probe for the first
    time.
    
    And in fact this logic is simply wrong. arch_uprobe_skip_sstep() can
    fail or not depending on the task/register state, if this insn can be
    emulated but, say, put_user() fails we need to xol it this time, but
    this doesn't mean we shouldn't try to emulate it when this or another
    thread hits this bp next time.
    
    And this is the actual reason for this change. We need to emulate the
    "call" insn, but push(return-address) can obviously fail.
    
    Per-arch notes:
    
    	x86: __skip_sstep() can only emulate "rep;nop". With this
    	     change it will be called every time and most probably
    	     for no reason.
    
    	     This will be fixed by the next changes. We need to
    	     change this suboptimal code anyway.
    
    	arm: Should not be affected. It has its own "bool simulate"
    	     flag checked in arch_uprobe_skip_sstep().
    
    	ppc: Looks like, it can emulate almost everything. Does it
    	     actually need to record the fact that emulate_step()
    	     failed? Hopefully not. But if yes, it can add the ppc-
    	     specific flag into arch_uprobe.
    
    TODO: rename arch_uprobe_skip_sstep() to arch_uprobe_emulate_insn(),
    Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
    Reviewed-by: default avatarMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Reviewed-by: default avatarDavid A. Long <dave.long@linaro.org>
    Reviewed-by: default avatarJim Keniston <jkenisto@us.ibm.com>
    Acked-by: default avatarSrikar Dronamraju <srikar@linux.vnet.ibm.com>
    8a6b1732
uprobes.c 47.1 KB