On 08/08, Liao, Chang wrote: > > - pre_ssout() resets the deny signal flag > > - uprobe_deny_signal() sets the deny signal flag when TIF_SIGPENDING is > cleared. > > - handle_singlestep() check the deny signal flag and restore TIF_SIGPENDING > if necessary. > > Does this approach look correct to you,do do you have any other way to > implement the "flag"?
Yes. But I don't think pre_ssout() needs to clear this flag. handle_singlestep() resets/clears state, active_uprobe, frees insn slot. So I guess we only need --- x/kernel/events/uprobes.c +++ x/kernel/events/uprobes.c @@ -2308,9 +2308,10 @@ static void handle_singlestep(struct upr utask->state = UTASK_RUNNING; xol_free_insn_slot(current); - spin_lock_irq(¤t->sighand->siglock); - recalc_sigpending(); /* see uprobe_deny_signal() */ - spin_unlock_irq(¤t->sighand->siglock); + if (utask->xxx) { + set_thread_flag(TIF_SIGPENDING); + utask->xxx = 0; + } if (unlikely(err)) { uprobe_warn(current, "execute the probed insn, sending SIGILL."); and that is all. Oleg.