[PATCH] introduce get_task_pid() to fix unsafe get_pid()
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@tv-sign.ru> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
1c0d04c9e4
commit
1a657f78dc
@@ -304,6 +304,15 @@ struct task_struct *find_task_by_pid_type(int type, int nr)
|
||||
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user