From: Oleg Nesterov <oleg@redhat.com>
To: Roland McGrath <roland@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
"Eric W. Biederman" <ebiederm@xmission.com>,
"Metzger, Markus T" <markus.t.metzger@intel.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/4] forget_original_parent: split out the un-ptrace part
Date: Mon, 23 Feb 2009 17:46:32 +0100 [thread overview]
Message-ID: <20090223164632.GA16294@redhat.com> (raw)
In-Reply-To: <20090220022746.8852CFC2F7@magilla.sf.frob.com>
On 02/19, Roland McGrath wrote:
>
> > +static inline int task_detached(struct task_struct *p)
>
> Maybe take the opportunity to make it bool?
> Clearly trivial, but a bit of implicit documentation that doesn't hurt.
Agreed. Actually I was going to do this, but forgot.
I'll send the cleanup patch.
> > +void exit_ptrace(struct task_struct *tracer)
> > +{
> > + struct task_struct *p, *n;
> > + LIST_HEAD(ptrace_dead);
>
> I think this can do a short-circuit for the common case and avoid the lock:
>
> if (list_empty(&tracer->ptraced))
> return;
4/4 does this, but
> I see your patch 4/4 on this. In fact, I think the short-circuit
> optimization of these two cases should be two separate patches.
agreed,
> The real-child optimization is just a new
> optimization beyond the status quo. It can really be considered wholly
> after this whole series (and probably just punted because it gets so hairy).
Yes. You can see from the changelog that I don't actually like this
optimizatio very much. Because it complicates the code, adds the barrier,
but needs thread_group_empty().
If we are going to optimize out tasklist in forget_original_parent(), then
I'd prefer http://marc.info/?l=linux-kernel&m=123438710725342
But this needs a fat comment. And I didn't think carefully about this code.
> (I don't
> see how release_task() could be a problem at all.
This was mostly about forget_original_parent...
But from the _pure theoretical_ pov, it is not correct to assume that
list_empty(&tracer->ptraced) == T means that current can not be used
somehow as tracee->parent. Another subthread can release a dead tracee.
For example, list_empty(&tracer->ptraced) == T doesn't mean that the
STOREs to this task_struct are finished, list_del_init(->ptrace_entry)
can still be in progress.
But since we take tasklist before release_task(current) we are safe,
even in theory.
> You didn't mention ptrace_traceme() in your 4/4 message.
And I guess you want to know why I didn't...
Because I forgot completely about traceme! Thanks Roland.
> In fact, that seems
> like a new hole, period--without the short-circuit optimization.
I think you are right, the current code looks racy too.
> That seems addressed by e.g.:
>
> --- a/kernel/ptrace.c
> +++ b/kernel/ptrace.c
> @@ -534,7 +534,7 @@ repeat:
> * Set the ptrace bit in the process ptrace flags.
> * Then link us on our parent's ptraced list.
> */
> - if (!ret) {
> + if (!ret && !(current->real_parent->flags & PF_EXITING)) {
> current->ptrace |= PT_PTRACED;
Yes sure.
But this means exit_ptrace() must always take tasklist, otherwise we
don't have the necessary barriers.
I am still feeling bad, will try to think more later.
Oleg.
next prev parent reply other threads:[~2009-02-23 16:50 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-11 21:12 [PATCH 1/4] forget_original_parent: split out the un-ptrace part Oleg Nesterov
2009-02-20 2:27 ` Roland McGrath
2009-02-23 16:46 ` Oleg Nesterov [this message]
2009-02-23 18:26 ` Oleg Nesterov
2009-02-23 18:57 ` Oleg Nesterov
2009-02-25 0:34 ` Roland McGrath
2009-02-25 20:44 ` Oleg Nesterov
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=20090223164632.GA16294@redhat.com \
--to=oleg@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=ebiederm@xmission.com \
--cc=linux-kernel@vger.kernel.org \
--cc=markus.t.metzger@intel.com \
--cc=roland@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.