在 2024/8/8 18:28, Oleg Nesterov 写道: > 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; > + } Agree, if no more discussion about this flag, I will just send v2 today. Thanks. > > if (unlikely(err)) { > uprobe_warn(current, "execute the probed insn, sending SIGILL."); > > and that is all. > > Oleg. > > -- BR Liao, Chang