[PATCH 1/1] pid_ns: move pid_ns_release_proc() from proc_flush_task() to zap_pid_ns_processes()

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Oleg Nesterov
Date: Wednesday, June 23, 2010 - 1:37 pm

This is mostly cleanup and optimization, but also fixes the bug.

proc_flush_task() checks upid->nr == 1 to detect the case when
a sub-namespace exits. However, this doesn't work in case when
a multithreaded init execs and calls release_task(old_leader),
the old leader has the same pid 1.

Move pid_ns_release_proc() to zap_pid_ns_processes(), it is called
when we know for sure that init is exiting.

Note: with or without this change this mntput() can happen before the
EXIT_DEAD tasks not visible to do_wait() have passed proc_flush_task().
We need more fixes.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---

 fs/proc/base.c         |    4 ----
 kernel/pid_namespace.c |    2 ++
 2 files changed, 2 insertions(+), 4 deletions(-)

--- 35-rc3/fs/proc/base.c~PNS_5_MOVE_MNTPUT_TO_ZAP	2010-06-23 22:06:01.000000000 +0200
+++ 35-rc3/fs/proc/base.c	2010-06-23 22:10:26.000000000 +0200
@@ -2745,10 +2745,6 @@ void proc_flush_task(struct task_struct 
 		proc_flush_task_mnt(upid->ns->proc_mnt, upid->nr,
 					tgid->numbers[i].nr);
 	}
-
-	upid = &pid->numbers[pid->level];
-	if (upid->nr == 1)
-		pid_ns_release_proc(upid->ns);
 }
 
 static struct dentry *proc_pid_instantiate(struct inode *dir,
--- 35-rc3/kernel/pid_namespace.c~PNS_5_MOVE_MNTPUT_TO_ZAP	2010-06-23 22:13:07.000000000 +0200
+++ 35-rc3/kernel/pid_namespace.c	2010-06-23 22:13:55.000000000 +0200
@@ -189,6 +189,8 @@ void zap_pid_ns_processes(struct pid_nam
 	} while (rc != -ECHILD);
 
 	acct_exit_ns(pid_ns);
+	pid_ns_release_proc(pid_ns);
+
 	return;
 }
 

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 0/4] pid_ns_prepare_proc/unshare cleanups, Oleg Nesterov, (Sat Jun 19, 12:08 pm)
[PATCH 2/4] procfs: kill the global proc_mnt variable, Oleg Nesterov, (Sat Jun 19, 12:10 pm)
[PATCH 0/6] Unshare support for the pid namespace., Eric W. Biederman, (Sun Jun 20, 1:42 am)
[PATCH 1/6] pid: Remove the child_reaper special case in ..., Eric W. Biederman, (Sun Jun 20, 1:44 am)
[PATCH 2/6] pidns: Call pid_ns_prepare_proc from create_pi ..., Eric W. Biederman, (Sun Jun 20, 1:45 am)
[PATCH 3/6] procfs: kill the global proc_mnt variable, Eric W. Biederman, (Sun Jun 20, 1:45 am)
[PATCH 4/6] pidns: Don't allow new pids after the namespac ..., Eric W. Biederman, (Sun Jun 20, 1:47 am)
[PATCH 5/6] pidns: Use task_active_pid_ns where appropriate, Eric W. Biederman, (Sun Jun 20, 1:48 am)
[PATCH 6/6] pidns: Support unsharing the pid namespace., Eric W. Biederman, (Sun Jun 20, 1:49 am)
Re: [PATCH 0/6] Unshare support for the pid namespace., Oleg Nesterov, (Sun Jun 20, 11:03 am)
[PATCH 0/2] pid_ns_release_proc() fixes, Oleg Nesterov, (Sun Jun 20, 11:05 am)
Re: [PATCH 0/6] Unshare support for the pid namespace., Eric W. Biederman, (Sun Jun 20, 2:00 pm)
Re: [PATCH 0/6] Unshare support for the pid namespace., Oleg Nesterov, (Sun Jun 20, 2:48 pm)
Re: [PATCH 0/6] Unshare support for the pid namespace., Oleg Nesterov, (Sun Jun 20, 2:56 pm)
Re: [PATCH 6/6] pidns: Support unsharing the pid namespace., Eric W. Biederman, (Sun Jun 20, 6:53 pm)
[PATCH 1/1] pid_ns: move pid_ns_release_proc() from proc_f ..., Oleg Nesterov, (Wed Jun 23, 1:37 pm)
Re: [PATCH 1/1] pid_ns: move pid_ns_release_proc() from pr ..., Sukadev Bhattiprolu, (Wed Jun 23, 11:36 pm)
Re: [PATCH 1/1] pid_ns: move pid_ns_release_proc() from pr ..., Eric W. Biederman, (Thu Jun 24, 12:06 am)
Re: [RESEND PATCH] pid_ns: Fix proc_flush_task() accessing ..., Sukadev Bhattiprolu, (Fri Jun 25, 11:37 am)
Re: [RESEND PATCH] pid_ns: Fix proc_flush_task() accessing ..., Sukadev Bhattiprolu, (Fri Jun 25, 2:26 pm)
Re: [RESEND PATCH] pid_ns: Fix proc_flush_task() accessing ..., Sukadev Bhattiprolu, (Fri Jun 25, 3:07 pm)
[PATCH 01/24] pidns: Remove races by stopping the caching ..., Eric W. Biederman, (Fri Jul 9, 8:58 am)
Re: [PATCH 01/24] pidns: Remove races by stopping the cach ..., Eric W. Biederman, (Sun Jul 11, 7:25 am)
[PATCH] pidns: Fix wait for zombies to be reaped in zap_pi ..., Eric W. Biederman, (Mon Jul 12, 11:09 am)
Re: [PATCH] pidns: Fix wait for zombies to be reaped in za ..., Eric W. Biederman, (Tue Jul 13, 6:47 pm)
Re: [PATCH] pidns: Fix wait for zombies to be reaped in za ..., Sukadev Bhattiprolu, (Wed Jul 14, 1:53 pm)
Re: [PATCH] pidns: Fix wait for zombies to be reaped in za ..., Eric W. Biederman, (Wed Jul 14, 2:35 pm)
Re: [PATCH] pidns: Fix wait for zombies to be reaped in za ..., Sukadev Bhattiprolu, (Sat Oct 30, 12:07 am)