> > I don't really understand why the SIGSTOP is your concern.
> > No matter what, you send that last, after ptrace is wired up to catch it.
> 
> Because the tracee must not dequeue and handle this SIGSTOP until it sees
> UTRACE_EVENT_SIGNAL_ALL in ->utrace_flags.

Right.  utrace_set_events() sets ->utrace_flags while holding utrace->lock.
Then send_sig() queues the signal while holding siglock.  Are the barriers
implicit in those locks not enough to guarantee that ->utrace_flags updates
are done by the time siglock is released, in the view of the other CPU that
then acquires siglock before reading ->utrace_flags (tracehook_get_signal)?

> Yes, ->ptrace should die. But we can't kill it right now. (I mean, I don't
> see how can we kill it before we have a more or less working ptrace code).

Ok.

> Until we kill it, ptrace_attach pathes should
> 
>       - set PT_PTRACED for task_ptrace() callers in exit/signal/etc.c

You mean the wait and do_notify_parent* paths.  Ok, it needs something
outside utrace proper as the mark for these, and it might as well remain
this for now.

>       - check it to avoid the races with another tracer doing detach,
>         iow simply to prevent __ptrace_link() before __ptrace_unlink().

I remain skeptical that this is a clean way to do things in the long run.
But ok.


Thanks,
Roland

Reply via email to