The patch titled introduce get_task_pid() to fix unsafe get_pid() has been removed from the -mm tree. Its filename is introduce-get_task_pid-to-fix-unsafe-get_pid.patch This patch was dropped because it was merged into mainline or a subsystem tree ------------------------------------------------------ Subject: introduce get_task_pid() to fix unsafe get_pid() From: Oleg Nesterov <oleg@xxxxxxxxxx> proc_pid_make_inode: ei->pid = get_pid(task_pid(task)); I think this is not safe. get_pid() can be preempted after checking "pid != NULL". Then the task exits, does detach_pid(), and RCU frees the pid. Signed-off-by: Oleg Nesterov <oleg@xxxxxxxxxx> Cc: "Eric W. Biederman" <ebiederm@xxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- fs/proc/base.c | 4 ++-- include/linux/pid.h | 2 ++ kernel/pid.c | 9 +++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff -puN fs/proc/base.c~introduce-get_task_pid-to-fix-unsafe-get_pid fs/proc/base.c --- a/fs/proc/base.c~introduce-get_task_pid-to-fix-unsafe-get_pid +++ a/fs/proc/base.c @@ -958,7 +958,7 @@ static struct inode *proc_pid_make_inode /* * grab the reference to task. */ - ei->pid = get_pid(task_pid(task)); + ei->pid = get_task_pid(task, PIDTYPE_PID); if (!ei->pid) goto out_unlock; @@ -1677,7 +1677,7 @@ static struct dentry *proc_base_instanti /* * grab the reference to the task. */ - ei->pid = get_pid(task_pid(task)); + ei->pid = get_task_pid(task, PIDTYPE_PID); if (!ei->pid) goto out_iput; diff -puN include/linux/pid.h~introduce-get_task_pid-to-fix-unsafe-get_pid include/linux/pid.h --- a/include/linux/pid.h~introduce-get_task_pid-to-fix-unsafe-get_pid +++ a/include/linux/pid.h @@ -68,6 +68,8 @@ extern struct task_struct *FASTCALL(pid_ extern struct task_struct *FASTCALL(get_pid_task(struct pid *pid, enum pid_type)); +extern struct pid *get_task_pid(struct task_struct *task, enum pid_type type); + /* * attach_pid() and detach_pid() must be called with the tasklist_lock * write-held. diff -puN kernel/pid.c~introduce-get_task_pid-to-fix-unsafe-get_pid kernel/pid.c --- a/kernel/pid.c~introduce-get_task_pid-to-fix-unsafe-get_pid +++ a/kernel/pid.c @@ -304,6 +304,15 @@ struct task_struct *find_task_by_pid_typ EXPORT_SYMBOL(find_task_by_pid_type); +struct pid *get_task_pid(struct task_struct *task, enum pid_type type) +{ + struct pid *pid; + rcu_read_lock(); + pid = get_pid(task->pids[type].pid); + rcu_read_unlock(); + return pid; +} + struct task_struct *fastcall get_pid_task(struct pid *pid, enum pid_type type) { struct task_struct *result; _ Patches currently in -mm which might be from oleg@xxxxxxxxxx are origin.patch rcu-simplify-improve-batch-tuning.patch pidhash-temporary-debug-checks.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html