lkml.org 
[lkml]   [2012]   [Jul]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] uprobes: don't enable/disable signle step if the user did it
    Well. I agree, this needs changes. To begin with, uprobe should avoid
    user_enable_single_step() which does access_process_vm(). And I suspect
    uprobes have the problems with TIF_FORCED_TF logic.

    But I am not sure about this patch...

    On 07/26, Sebastian Andrzej Siewior wrote:
    >
    > @@ -1528,7 +1528,10 @@ static void handle_swbp(struct pt_regs *regs)
    >
    > utask->state = UTASK_SSTEP;
    > if (!pre_ssout(uprobe, regs, bp_vaddr)) {
    > - user_enable_single_step(current);
    > + if (test_tsk_thread_flag(current, TIF_SINGLESTEP))
    > + uprobe->flags |= UPROBE_USER_SSTEP;
    > + else
    > + user_enable_single_step(current);

    This is x86 specific, TIF_SINGLESTEP is not defined on every arch.

    > @@ -1569,7 +1572,10 @@ static void handle_singlestep(struct uprobe_task *utask, struct pt_regs *regs)
    > put_uprobe(uprobe);
    > utask->active_uprobe = NULL;
    > utask->state = UTASK_RUNNING;
    > - user_disable_single_step(current);
    > + if (uprobe->flags & UPROBE_USER_SSTEP)
    > + uprobe->flags &= ~UPROBE_USER_SSTEP;
    > + else
    > + user_disable_single_step(current);

    This is not enough (and I am not sure this is portable).

    If SINGLESTEP was set, we should send SIGTRAP here. With this patch
    we return with X86_EFLAGS_TF set, gdb will be notified only after the
    next insn. And if we notify gdb, there is no need to keep X86_EFLAGS_TF.

    I'm afraid this needs more thinking and new arch-dependant helpers.

    Oleg.



    \
     
     \ /
      Last update: 2012-07-26 21:01    [W:0.023 / U:20.580 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site