Re: [PATCH 1/1] ptrace: make sure do_wait() won't hang afterPTRACE_ATTACH
From: Oleg Nesterov
Date: Thu Feb 24 2011 - 16:17:16 EST
On 02/22, Tejun Heo wrote:
> Okay, I think I finally caught up with the discussion (hopefully).
> On Mon, Feb 21, 2011 at 04:28:55PM +0100, Oleg Nesterov wrote:
> > However, I am starting to agree that TASK_TRACED looks more clean.
> > What is important, I think ptrace should respect SIGNAL_STOP_STOPPED.
> > IOW, when the tracee is group-stopped (TASK_STOPPED or TASK_TRACED,
> > doesn't matter), ptrace_resume() should not wake it up, but merely
> > do set_task_state(TASK_STATE) and make it resumeable by SIGCONT.
> I don't think that's gonna fly. It first is a very user-visible
> change to how ptrace_resume() works
Yes. But can't resist, this is a bit unfair ;) It was you who convinced
me we should cleanup this horror somehow, even if we break some corner
However, again, I can't argue. Perhaps this change is too radical.
In particular, if Jan thinks this is not acceptable - I'll shut up
> and it removes a lot of debugging
Well. I don't think it limits the current ptrace interface somehow,
> As Jan's examples showed, there are things which the
> debugger does behind group stop's back and some of them are quite
> legitimate and useful things to do like running some code
Yes. This can surprise a user which runs the unmodified debugger.
> If you mix ptrace trap and group stop and then fix group stop
> notification, not only multithreaded debugging becomes quite
> cumbersome (suddenly ptracing becomes per-process thing instead of
It should be, imho. Like SIGKILL, SIGSTOP/SIGCONT are not per-thread.
This is per-process thing.
> it becomes almost impossible to debug jctl behaviors.
> Jctl becomes completely intertwined with ptracing and the real parent
> would get numerous notifications during the course of debugging.
Again, I think this is a win. The real parent should know that, say,
its child becomes running after it was stopped. It does not matter
why it was CLD_CONTINUED, it was resumed and that is all.
> I think they belong to different layers and they should stack instead
> of mix. I'll try to write up a summary for how I think it can be done
OK. You know, we already spent sooooooooooooooooooooooooooooooooooooooo
much time discussing this, I have the strong desire to agree in advance
with anything new ;)
> but in short I think we just need two more PTRACE calls (one for
> combined SIGSTOPless attach + INTERRUPT
Yes, we are discussing these requests on archer,
> and the other for jctl
Of course, we can add the new requests to help gdb/strace/whatever
to handle jctl. In fact I think we should in any case.
But this is "easy". In the context of this discussion, my only concern
is the current behaviour.
> and there doesn't need to be any fundamental revolt in how
> ptrace and jctl interact with each other. The current ptrace behavior
> is quirky and rough on the edges but I think the fundamentals are
> correct in that it's something which is fundamentally bound to a task
> (not task group)
Aha. see above. I feel this is not true. But, as usual, can't prove.
> That way, most current users won't notice (e.g. entering TASK_TRACED
> directly on SIGSTOP doesn't make any different to strace or gdb,
Just in case, let me repeat... Yes, I think you are right, TASK_TRACE
looks more clean if the tracee does do_signal_stop().
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/