From: Louis Rilling <Louis.Rilling@kerlabs.com>
To: Greg Kurz <gkurz@fr.ibm.com>
Cc: Oleg Nesterov <oleg@redhat.com>,
linux-kernel@vger.kernel.org, ebiederm@xmission.com,
containers@lists.osdl.org, akpm@linux-foundation.org,
xemul@openvz.org
Subject: Re: [PATCH] Introduce ActivePid: in /proc/self/status (v2, was Vpid:)
Date: Thu, 16 Jun 2011 14:35:55 +0200 [thread overview]
Message-ID: <20110616123554.GA7230@hawkmoon.kerlabs.com> (raw)
In-Reply-To: <1308222107.8230.49.camel@bahia.local>
[-- Attachment #1: Type: text/plain, Size: 2421 bytes --]
On 16/06/11 13:01 +0200, Greg Kurz wrote:
> On Wed, 2011-06-15 at 20:46 +0200, Oleg Nesterov wrote:
> > On 06/15, Greg Kurz wrote:
> > >
> > > @@ -176,6 +177,17 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
> > > if (tracer)
> > > tpid = task_pid_nr_ns(tracer, ns);
> > > }
> > > + actpid = 0;
> > > + sighand = rcu_dereference(p->sighand);
> > > + if (sighand) {
> > > + struct pid_namespace *pid_ns;
> > > + unsigned long flags;
> > > + spin_lock_irqsave(&sighand->siglock, flags);
> >
> > Well. This is not exactly right. We have lock_task_sighand() for this.
> >
>
> I see... ->sighand could change so we need the for(;;) loop in
> __lock_task_sighand() to be sure we have the right pointer, correct ?
> By the way, if we use lock_task_sighand() we'll end up with nested
> rcu_read_lock(): it will work but I don't know how it may affect
> performance...
rcu_read_lock() is very cheap.
>
> > But. Why do you need ->siglock? Why rcu_read_lock() is not enough?
> >
>
> Because there's a race with
> __exit_signal()->__unhash_process()->detach_pid() that can break
> task_active_pid_ns() and rcu won't help here (unless *perhaps* by
> modifying __exit_signal() but I don't want to mess with such a critical
> path).
In case of race, the only risk is that task_active_pid_ns() returns NULL.
Otherwise, RCU guarantees that the pid_ns will stay alive (see below).
>
> > Hmm. You don't even need pid_ns afaics, you could simply look at
> > pid->numbers[pid->level].
> >
>
> True but I will have the same problem: detach_pid() nullifies the pid.
But the pid won't be freed until an RCU grace period expires. See free_pid(). So
the non-determinism here is when /proc/<pid>/status is read at the same as
threaded execve() or task's exit(), in which case a stale pid (execve()) or
no pid (exit after __unhash_process()) can be accessed. This does not look like
a big deal...
Thanks,
Louis
>
> Thanks for your comments.
>
> --
> Greg
>
> _______________________________________________
> Containers mailing list
> Containers@lists.linux-foundation.org
> https://lists.linux-foundation.org/mailman/listinfo/containers
--
Dr Louis Rilling Kerlabs
Skype: louis.rilling Batiment Germanium
Phone: (+33|0) 6 80 89 08 23 80 avenue des Buttes de Coesmes
http://www.kerlabs.com/ 35700 Rennes
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
next prev parent reply other threads:[~2011-06-16 12:35 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-15 14:55 [PATCH] Introduce ActivePid: in /proc/self/status (v2, was Vpid:) Greg Kurz
2011-06-15 18:46 ` Oleg Nesterov
2011-06-15 19:08 ` Eric W. Biederman
2011-06-16 11:01 ` Greg Kurz
2011-06-16 12:35 ` Louis Rilling [this message]
2011-06-16 13:00 ` Greg Kurz
2011-06-16 13:18 ` Oleg Nesterov
2011-06-16 13:25 ` Louis Rilling
2011-06-16 14:51 ` Oleg Nesterov
2011-06-16 15:08 ` Louis Rilling
2011-06-16 15:01 ` Greg Kurz
2011-06-16 15:27 ` Louis Rilling
2011-06-16 12:42 ` Oleg Nesterov
2011-06-15 19:03 ` Oleg Nesterov
2011-06-16 11:19 ` Greg Kurz
2011-06-16 12:25 ` Cedric Le Goater
2011-06-16 13:06 ` Oleg Nesterov
2011-06-16 14:25 ` Cedric Le Goater
2011-06-16 15:22 ` Eric W. Biederman
2011-06-16 16:22 ` Oleg Nesterov
2011-06-16 15:07 ` Eric W. Biederman
2011-06-16 15:33 ` Greg Kurz
2011-06-16 16:12 ` Oleg Nesterov
2011-06-16 12:52 ` Oleg Nesterov
2011-06-16 17:54 ` Bryan Donlan
2011-06-20 11:45 ` Greg Kurz
2011-06-20 17:37 ` Bryan Donlan
2011-06-20 22:44 ` Eric W. Biederman
2011-06-22 15:29 ` Greg Kurz
2011-06-23 0:39 ` Eric W. Biederman
2011-06-23 13:43 ` Greg Kurz
2011-06-23 14:37 ` Serge Hallyn
2011-06-22 15:00 ` Greg Kurz
2011-06-22 16:56 ` Bryan Donlan
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=20110616123554.GA7230@hawkmoon.kerlabs.com \
--to=louis.rilling@kerlabs.com \
--cc=akpm@linux-foundation.org \
--cc=containers@lists.osdl.org \
--cc=ebiederm@xmission.com \
--cc=gkurz@fr.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=oleg@redhat.com \
--cc=xemul@openvz.org \
/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.