Messages in this thread | | | Date | Wed, 27 Aug 2008 21:06:48 +0400 | From | Oleg Nesterov <> | Subject | Re: [PATCH 2/4] pid_ns: (BUG 11391) change ->child_reaper when init->group_leader exits |
| |
On 08/26, sukadev@us.ibm.com wrote: > > sukadev@us.ibm.com [sukadev@us.ibm.com] wrote: > | I was able to repro the problem without the patchset and could not > | reproduce with the patchset. But just had a quick question while > | reviewing the patches. > | > | Oleg Nesterov [oleg@tv-sign.ru] wrote: > | | We don't change pid_ns->child_reaper when the main thread of the > | | subnamespace init exits. As Robert Rex <robert.rex@exasol.com> > | | pointed out this is wrong. > | | > | | Yes, the re-parenting itself works correctly, but if the reparented > | | task exits it needs ->parent->nsproxy->pid_ns in do_notify_parent(), > | > | If the task was reparented, then with patch 1/4 its parent would be > | the global init (init_pid_ns.child_reaper) right ? > | > | | and if the main thread is zombie its ->nsproxy was already cleared > | | by exit_task_namespaces(). > | > | If above is true, then even if the main thread's nsproxy is NULL, does > | it affect the reparented task ? > > never mind. I see it now. The group_dead check in current code is not > sufficient (and the zap_pid_ns() may not have been called when main > thread is exiting).
Yes.
BTW, your original patch (which introduced zap_pid_ns()) was correct ;) The code was broken later, during the s/->pid/vpid/ conversion.
The group_dead check _is_ sufficient (and correct) for zap_pid_ns(), but we all missed the simple fact: if we continue to re-parent to some task, it must have the valid ->nsproxy->pid_ns. Thanks to Robert again.
Oleg.
| |