• O
    uprobes/x86: Xol should send SIGTRAP if X86_EFLAGS_TF was set · 3a4664aa
    Oleg Nesterov 提交于
    arch_uprobe_disable_step() correctly preserves X86_EFLAGS_TF and
    returns to user-mode. But this means the application gets SIGTRAP
    only after the next insn.
    
    This means that UPROBE_CLEAR_TF logic is not really right. _enable
    should only record the state of X86_EFLAGS_TF, and _disable should
    check it separately from UPROBE_FIX_SETF.
    
    Remove arch_uprobe_task->restore_flags, add ->saved_tf instead, and
    change enable/disable accordingly. This assumes that the probed insn
    was not trapped, see the next patch.
    
    arch_uprobe_skip_sstep() logic has the same problem, change it to
    check X86_EFLAGS_TF and send SIGTRAP as well. We will cleanup this
    all after we fold enable/disable_step into pre/post_hol hooks.
    
    Note: send_sig(SIGTRAP) is not actually right, we need send_sigtrap().
    But this needs more changes, handle_swbp() does the same and this is
    equally wrong.
    Signed-off-by: NOleg Nesterov <oleg@redhat.com>
    Acked-by: NSrikar Dronamraju <srikar@linux.vnet.ibm.com>
    3a4664aa
uprobes.c 22.5 KB