|
@@ -1397,16 +1397,13 @@ asmlinkage long sys_setpgid(pid_t pid, pid_t pgid)
|
|
|
goto out;
|
|
|
|
|
|
if (pgid != pid) {
|
|
|
- struct task_struct *p;
|
|
|
+ struct task_struct *g =
|
|
|
+ find_task_by_pid_type(PIDTYPE_PGID, pgid);
|
|
|
|
|
|
- do_each_task_pid(pgid, PIDTYPE_PGID, p) {
|
|
|
- if (process_session(p) == process_session(group_leader))
|
|
|
- goto ok_pgid;
|
|
|
- } while_each_task_pid(pgid, PIDTYPE_PGID, p);
|
|
|
- goto out;
|
|
|
+ if (!g || process_session(g) != process_session(group_leader))
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
-ok_pgid:
|
|
|
err = security_task_setpgid(p, pgid);
|
|
|
if (err)
|
|
|
goto out;
|