diff options
author | Oleg Nesterov <[email protected]> | 2006-10-02 02:18:59 -0700 |
---|---|---|
committer | Linus Torvalds <[email protected]> | 2006-10-02 07:57:25 -0700 |
commit | 1a657f78dcc8ea7c53eaa1f2a45ea2315738c15f (patch) | |
tree | a19972027792082fed505c8d540f7d877e37c0ab /fs/proc/base.c | |
parent | 1c0d04c9e44f4a248335c33d2be7c7f7b06ff359 (diff) |
[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 <[email protected]>
Cc: "Eric W. Biederman" <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'fs/proc/base.c')
-rw-r--r-- | fs/proc/base.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/proc/base.c b/fs/proc/base.c index a317eb2c4442..82da55b5cffe 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -958,7 +958,7 @@ static struct inode *proc_pid_make_inode(struct super_block * sb, struct task_st /* * 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_instantiate(struct inode *dir, /* * 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; |