Messages in this thread Patch in this message | | | Date | Fri, 7 Nov 2014 21:14:54 +0100 | From | Oleg Nesterov <> | Subject | [PATCH 4/4] proc: task_state: ptrace_parent() doesn't need pid_alive() check |
| |
p->ptrace != 0 means that release_task(p) was not called, so pid_alive() buys nothing and we can remove this check. Other callers already use it directly without additional checks.
Note: with or without this patch ptrace_parent() can return the pointer to the freed task, this will be explained/fixed later.
Signed-off-by: Oleg Nesterov <oleg@redhat.com> --- fs/proc/array.c | 13 ++++++------- 1 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/fs/proc/array.c b/fs/proc/array.c index 800e30f..bd117d0 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c @@ -157,19 +157,18 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns, struct user_namespace *user_ns = seq_user_ns(m); struct group_info *group_info; int g; + struct task_struct *tracer; const struct cred *cred; - pid_t ppid, tpid, tgid, ngid; + pid_t ppid, tpid = 0, tgid, ngid; unsigned int max_fds = 0; rcu_read_lock(); ppid = pid_alive(p) ? task_tgid_nr_ns(rcu_dereference(p->real_parent), ns) : 0; - tpid = 0; - if (pid_alive(p)) { - struct task_struct *tracer = ptrace_parent(p); - if (tracer) - tpid = task_pid_nr_ns(tracer, ns); - } + + tracer = ptrace_parent(p); + if (tracer) + tpid = task_pid_nr_ns(tracer, ns); tgid = task_tgid_nr_ns(p, ns); ngid = task_numa_group_id(p); -- 1.5.5.1
| |