Files
linux/include/linux
Oleg Nesterov 8190773985 kernel/fork.c:copy_process(): don't add the uninitialized child to thread/task/pid lists
copy_process() adds the new child to thread_group/init_task.tasks list and
then does attach_pid(child, PIDTYPE_PID).  This means that the lockless
next_thread() or next_task() can see this thread with the wrong pid.  Say,
"ls /proc/pid/task" can list the same inode twice.

We could move attach_pid(child, PIDTYPE_PID) up, but in this case
find_task_by_vpid() can find the new thread before it was fully
initialized.

And this is already true for PIDTYPE_PGID/PIDTYPE_SID, With this patch
copy_process() initializes child->pids[*].pid first, then calls
attach_pid() to insert the task into the pid->tasks list.

attach_pid() no longer need the "struct pid*" argument, it is always
called after pid_link->pid was already set.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Michal Hocko <mhocko@suse.cz>
Cc: Pavel Emelyanov <xemul@parallels.com>
Cc: Sergey Dyasly <dserrg@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2013-07-03 16:08:03 -07:00
..
2013-05-17 14:31:05 -04:00
2013-03-01 13:39:00 -08:00
2013-01-02 17:36:10 -08:00
2013-05-07 19:46:02 -07:00
2013-05-29 15:50:34 -04:00
2013-04-29 15:40:23 -04:00
2013-07-03 16:07:39 -07:00
2013-03-23 16:11:31 -07:00
2013-03-22 15:18:18 -07:00
2013-03-12 11:30:04 -07:00
2013-05-10 14:37:17 +01:00
2013-05-01 16:36:22 +05:30
2013-03-28 10:10:25 -06:00
2013-02-26 02:46:08 -05:00
2013-05-07 18:38:27 -07:00
2013-03-15 15:09:43 +10:30
2013-04-29 18:28:40 -07:00
2013-06-17 16:38:57 -07:00
2013-06-10 13:45:49 -07:00
2013-05-06 13:07:33 +02:00
2013-07-03 16:07:32 -07:00
2013-01-25 21:03:54 -08:00
2013-02-06 15:59:47 -05:00
2013-01-29 13:59:57 -05:00
2013-06-17 16:38:57 -07:00
2013-04-30 17:04:06 -07:00
2013-04-01 11:04:50 -07:00
2013-04-30 17:04:00 -07:00
2013-03-15 15:09:43 +10:30
2012-12-25 18:45:06 -05:00
2013-04-29 18:28:44 -07:00
2013-05-04 14:47:26 -04:00
2013-04-29 15:54:28 -07:00
2013-03-12 11:40:53 -04:00
2013-04-29 15:54:28 -07:00
2013-04-12 10:26:23 +02:00
2013-07-03 16:08:02 -07:00
2013-06-17 16:38:57 -07:00
2013-04-09 14:13:29 -04:00
2013-02-19 08:43:34 +01:00
2013-06-17 18:09:53 +09:00
2013-03-29 15:31:30 -04:00
2013-06-25 16:07:44 -07:00
2013-04-30 15:50:12 +05:30
2013-03-21 11:47:51 -04:00
2013-01-15 22:43:15 -08:00
2013-03-20 12:10:38 -04:00
2013-04-29 15:54:37 -07:00
2013-05-27 10:57:53 +09:00