From: Pavel Emelyanov When the pid comes from the userspace, the find_task_by_pid_ns() should be used to find the task by pid in particular (usually the current) namespace. These places were lost in earlier patches. Think over: all these places work like this: if (pid == 0) task = current; else task = find_task_by_pid_ns(pid); the question is: does it worth introducing a common helper for such case and (if it does) what should its name be? Signed-off-by: Pavel Emelyanov Signed-off-by: Alexey Dobriyan Cc: Sukadev Bhattiprolu Cc: Oleg Nesterov Signed-off-by: Andrew Morton --- fs/ioprio.c | 6 ++++-- kernel/futex.c | 6 ++++-- kernel/futex_compat.c | 3 ++- kernel/sched.c | 3 ++- mm/mempolicy.c | 3 ++- mm/migrate.c | 3 ++- 6 files changed, 16 insertions(+), 8 deletions(-) diff -puN fs/ioprio.c~pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual fs/ioprio.c --- a/fs/ioprio.c~pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual +++ a/fs/ioprio.c @@ -94,7 +94,8 @@ asmlinkage long sys_ioprio_set(int which if (!who) p = current; else - p = find_task_by_pid(who); + p = find_task_by_pid_ns(who, + current->nsproxy->pid_ns); if (p) ret = set_task_ioprio(p, ioprio); break; @@ -181,7 +182,8 @@ asmlinkage long sys_ioprio_get(int which if (!who) p = current; else - p = find_task_by_pid(who); + p = find_task_by_pid_ns(who, + current->nsproxy->pid_ns); if (p) ret = get_task_ioprio(p); break; diff -puN kernel/futex.c~pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual kernel/futex.c --- a/kernel/futex.c~pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual +++ a/kernel/futex.c @@ -446,7 +446,8 @@ static struct task_struct * futex_find_g struct task_struct *p; rcu_read_lock(); - p = find_task_by_pid(pid); + p = find_task_by_pid_ns(pid, + current->nsproxy->pid_ns); if (!p || ((current->euid != p->euid) && (current->euid != p->uid))) p = ERR_PTR(-ESRCH); @@ -1857,7 +1858,8 @@ sys_get_robust_list(int pid, struct robu ret = -ESRCH; rcu_read_lock(); - p = find_task_by_pid(pid); + p = find_task_by_pid_ns(pid, + current->nsproxy->pid_ns); if (!p) goto err_unlock; ret = -EPERM; diff -puN kernel/futex_compat.c~pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual kernel/futex_compat.c --- a/kernel/futex_compat.c~pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual +++ a/kernel/futex_compat.c @@ -117,7 +117,8 @@ compat_sys_get_robust_list(int pid, comp ret = -ESRCH; read_lock(&tasklist_lock); - p = find_task_by_pid(pid); + p = find_task_by_pid_ns(pid, + current->nsproxy->pid_ns); if (!p) goto err_unlock; ret = -EPERM; diff -puN kernel/sched.c~pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual kernel/sched.c --- a/kernel/sched.c~pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual +++ a/kernel/sched.c @@ -4163,7 +4163,8 @@ struct task_struct *idle_task(int cpu) */ static inline struct task_struct *find_process_by_pid(pid_t pid) { - return pid ? find_task_by_pid(pid) : current; + return pid ? + find_task_by_pid_ns(pid, current->nsproxy->pid_ns) : current; } /* Actually do priority change: must hold rq lock. */ diff -puN mm/mempolicy.c~pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual mm/mempolicy.c --- a/mm/mempolicy.c~pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual +++ a/mm/mempolicy.c @@ -940,7 +940,8 @@ asmlinkage long sys_migrate_pages(pid_t /* Find the mm_struct */ read_lock(&tasklist_lock); - task = pid ? find_task_by_pid(pid) : current; + task = pid ? + find_task_by_pid_ns(pid, current->nsproxy->pid_ns) : current; if (!task) { read_unlock(&tasklist_lock); return -ESRCH; diff -puN mm/migrate.c~pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual mm/migrate.c --- a/mm/migrate.c~pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual +++ a/mm/migrate.c @@ -924,7 +924,8 @@ asmlinkage long sys_move_pages(pid_t pid /* Find the mm_struct */ read_lock(&tasklist_lock); - task = pid ? find_task_by_pid(pid) : current; + task = pid ? + find_task_by_pid_ns(pid, current->nsproxy->pid_ns) : current; if (!task) { read_unlock(&tasklist_lock); return -ESRCH; _