diff options
author | Oleg Nesterov <oleg@tv-sign.ru> | 2006-10-02 02:18:59 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-02 07:57:25 -0700 |
commit | 1a657f78dcc8ea7c53eaa1f2a45ea2315738c15f (patch) | |
tree | a19972027792082fed505c8d540f7d877e37c0ab /include/linux | |
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 <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>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/pid.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/pid.h b/include/linux/pid.h index 7e39767b4c6..17b9e04d358 100644 --- a/include/linux/pid.h +++ b/include/linux/pid.h @@ -68,6 +68,8 @@ extern struct task_struct *FASTCALL(pid_task(struct pid *pid, enum pid_type)); 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. |