From: Oleg Nesterov <oleg@redhat.com> Date: Fri, 21 Nov 2008 16:15:30 +0100 Subject: [misc] setpgid returns ESRCH in some situations Message-id: 20081121151530.GA13664@redhat.com O-Subject: [RHEL5 PATCH] BZ#472433: setpgid() returns ESRCH in some situations Bugzilla: 472433 RH-Acked-by: Jerome Marchand <jmarchan@redhat.com> RH-Acked-by: Anton Arapov <aarapov@redhat.com> RH-Acked-by: John Feeney <jfeeney@redhat.com> From: Guy Streeter <streeter@redhat.com> Backport of upstream "setpgid(child) fails if the child was forked by sub-thread" commit b07e35f94a7b6a059f889b904529ee907dc0634d. Note: unlike upstream, we use ->parent, not ->real_parent. This is correct due to utrace. Signed-off-by: Oleg Nesterov <oleg@redhat.com> diff --git a/kernel/sys.c b/kernel/sys.c index 7695fc5..18b3f74 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -1275,7 +1275,7 @@ asmlinkage long sys_setpgid(pid_t pid, pid_t pgid) if (!thread_group_leader(p)) goto out; - if (p->parent == group_leader) { + if (p->parent->tgid == group_leader->tgid) { err = -EPERM; if (p->signal->session != group_leader->signal->session) goto out;