Message ID | 87368uxa8x.fsf_-_@x220.int.ebiederm.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2,1/2] proc: Use PIDTYPE_TGID in next_tgid | expand |
On 04/23, Eric W. Biederman wrote: > > @@ -3360,20 +3360,8 @@ static struct tgid_iter next_tgid(struct pid_namespace *ns, struct tgid_iter ite > pid = find_ge_pid(iter.tgid, ns); > if (pid) { > iter.tgid = pid_nr_ns(pid, ns); > - iter.task = pid_task(pid, PIDTYPE_PID); > - /* What we to know is if the pid we have find is the > - * pid of a thread_group_leader. Testing for task > - * being a thread_group_leader is the obvious thing > - * todo but there is a window when it fails, due to > - * the pid transfer logic in de_thread. > - * > - * So we perform the straight forward test of seeing > - * if the pid we have found is the pid of a thread > - * group leader, and don't worry if the task we have > - * found doesn't happen to be a thread group leader. > - * As we don't care in the case of readdir. > - */ > - if (!iter.task || !has_group_leader_pid(iter.task)) { > + iter.task = pid_task(pid, PIDTYPE_TGID); > + if (!iter.task) { > iter.tgid += 1; > goto retry; > } Acked-by: Oleg Nesterov <oleg@redhat.com>
diff --git a/fs/proc/base.c b/fs/proc/base.c index 2868bff1a142..a48b4d4056a9 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -3360,20 +3360,8 @@ static struct tgid_iter next_tgid(struct pid_namespace *ns, struct tgid_iter ite pid = find_ge_pid(iter.tgid, ns); if (pid) { iter.tgid = pid_nr_ns(pid, ns); - iter.task = pid_task(pid, PIDTYPE_PID); - /* What we to know is if the pid we have find is the - * pid of a thread_group_leader. Testing for task - * being a thread_group_leader is the obvious thing - * todo but there is a window when it fails, due to - * the pid transfer logic in de_thread. - * - * So we perform the straight forward test of seeing - * if the pid we have found is the pid of a thread - * group leader, and don't worry if the task we have - * found doesn't happen to be a thread group leader. - * As we don't care in the case of readdir. - */ - if (!iter.task || !has_group_leader_pid(iter.task)) { + iter.task = pid_task(pid, PIDTYPE_TGID); + if (!iter.task) { iter.tgid += 1; goto retry; }
Combine the pid_task and thes test has_group_leader_pid into a single dereference by using pid_task(PIDTYPE_TGID). This makes the code simpler and proof against needing to even think about any shenanigans that de_thread might get up to. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> --- fs/proc/base.c | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-)