> I don't think this can work. context->siginfo can be cleared and then
> set again in between. If we race with SIGKILL, utrace_get_signal()
> can dequeue another signal != SIGKILL and start the reporting loop.

That's not supposed to be possible.  See "sigset_t sigkill_only;" et al.
I guess it is possible when it's an earlier utrace_stop() that is what's
broken by SIGKILL.  Then utrace_get_signal() is entered when SIGKILL is
pending.  It should have a fatal_signal_pending() check earlier then.
We really want it to be ironclad that when UTRACE_STOP is broken the only
meaningful thing that can happen is do_group_exit(SIGKILL).

> I thought about
> 
>       *info = *context_info;
>       rmb();
>       if (fatal_ignal_pending(tracee))
>               return -ERR;
> 
> But I think it is better to do theses cleanups after V1.

Agreed.


Thanks,
Roland

Reply via email to