From: Roland McGrath <roland@redhat.com>
To: Oleg Nesterov <oleg@redhat.com>
Cc: Christoph Hellwig <hch@infradead.org>,
Ingo Molnar <mingo@elte.hu>,
linux-kernel@vger.kernel.org, jan.kratochvil@redhat.com,
Denys Vlasenko <dvlasenk@redhat.com>
Subject: Re: ptrace && task->exit_code
Date: Sun, 31 May 2009 19:16:29 -0700 (PDT) [thread overview]
Message-ID: <20090601021629.E9F7FFC3C7@magilla.sf.frob.com> (raw)
In-Reply-To: Oleg Nesterov's message of Friday, 29 May 2009 21:06:27 +0200 <20090529190627.GA7017@redhat.com>
> If we attach, and the task is already stopped, this really means
> it was traced and untraced. We can set ->exit_code = SIGSTOP to
> ensure do_wait() will succeed.
If you go that route you really need a do_notify_parent_cldstop() call too.
Obviously the tracer itself won't be blocked in wait while it's in the
middle of this ptrace call. But it might be relying on a designated thread
calling wait, or it might call wait only when provoked by SIGCHLD, etc.
If you do that, you might as well just do:
spin_lock(task->signal->siglock);
specific_send_sig_info(SIGSTOP, SEND_SIG_FORCED, task);
signal_wake_up(task, 1);
spin_unlock(task->signal->siglock);
That way PTRACE_ATTACH would have a uniform effect on task whether it
was stopped or not. It always gives the tracer a fresh stop, never
leaves another SIGSTOP queued afterwards, and it's always a proper
ptrace stop where the debugger gets the full range of options like
injecting a new signal and using PTRACE_SETSIGINFO. (OTOH, then the
debugger can't necessarily tell if the task had been stopped or not
before the attach.)
Jan will probably affirm that userland debuggers wish it had always been
this way. But real userland debuggers already cope with existing
kernels and will have to continue to cope with old kernels for a long
time to come. So I don't see that it buys anything to change it now.
> This also relates to attach-wait-on-stopped test-case, I cc'ed
> Jan and Denys.
>
> Note also that after
>
> do_wait: fix waiting for the group stop with the dead leader
> commit: 90bc8d8b1a38f1ab131a2399a202e1889db95de8
>
> we can't confuse task->real_parent waiting for jctl stop.
Hmm. I had not thought about how the 90bc8d8 change to touch
group_exit_code instead for real parents affected this ptrace area.
That means that PTRACE_ATTACH while already stopped but not waited-for
no longer "steals" the real parent's tracking of the child's stoppedness
when it had not yet done a wait after its SIGCHLD/wakeup. After detach,
that wait could happen just like it would have before the debugger came
along. However, nothing will wake up the parent's wait if it's already
blocked in one at detach time.
Thanks,
Roland
next prev parent reply other threads:[~2009-06-01 2:17 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-25 0:00 [RFC PATCH 7/X] ptrace: mv task->parent ptrace_task->pt_tracer Oleg Nesterov
2009-05-25 21:59 ` Oleg Nesterov
2009-05-25 22:39 ` [RFC PATCH 8/X] ptrace: introduce ptrace_tracer() helper Oleg Nesterov
2009-05-27 2:45 ` Roland McGrath
2009-05-27 21:45 ` Oleg Nesterov
2009-05-27 22:24 ` Roland McGrath
2009-05-27 2:11 ` [RFC PATCH 7/X] ptrace: mv task->parent ptrace_task->pt_tracer Roland McGrath
2009-05-27 22:41 ` Oleg Nesterov
2009-05-27 23:05 ` ptrace && task->exit_code Oleg Nesterov
2009-05-27 23:21 ` Roland McGrath
2009-05-29 19:06 ` Oleg Nesterov
2009-06-01 2:16 ` Roland McGrath [this message]
2009-05-27 23:07 ` [RFC PATCH 7/X] ptrace: mv task->parent ptrace_task->pt_tracer Roland McGrath
2009-05-27 23:59 ` Oleg Nesterov
2009-05-28 0:32 ` Roland McGrath
2009-05-28 2:54 ` Oleg Nesterov
2009-05-28 3:19 ` Roland McGrath
2009-05-28 3:35 ` Oleg Nesterov
2009-05-28 19:28 ` Roland McGrath
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090601021629.E9F7FFC3C7@magilla.sf.frob.com \
--to=roland@redhat.com \
--cc=dvlasenk@redhat.com \
--cc=hch@infradead.org \
--cc=jan.kratochvil@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=oleg@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®