diff --git a/[refs] b/[refs] index 9600a1140f14..dd952f55ae4e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ee0acf90d320c29916ba8c5c1b2e908d81f5057d +refs/heads/master: e19f247a3dbd85485ec13174817ae9c2478fe541 diff --git a/trunk/kernel/exit.c b/trunk/kernel/exit.c index a80824f6108b..caceabf3f230 100644 --- a/trunk/kernel/exit.c +++ b/trunk/kernel/exit.c @@ -257,7 +257,7 @@ static inline void reparent_to_init(void) void __set_special_pids(pid_t session, pid_t pgrp) { - struct task_struct *curr = current; + struct task_struct *curr = current->group_leader; if (curr->signal->session != session) { detach_pid(curr, PIDTYPE_SID); diff --git a/trunk/kernel/sys.c b/trunk/kernel/sys.c index 43e557211d8d..f497bf56ada1 100644 --- a/trunk/kernel/sys.c +++ b/trunk/kernel/sys.c @@ -1215,24 +1215,22 @@ asmlinkage long sys_getsid(pid_t pid) asmlinkage long sys_setsid(void) { + struct task_struct *group_leader = current->group_leader; struct pid *pid; int err = -EPERM; - if (!thread_group_leader(current)) - return -EINVAL; - down(&tty_sem); write_lock_irq(&tasklist_lock); - pid = find_pid(PIDTYPE_PGID, current->pid); + pid = find_pid(PIDTYPE_PGID, group_leader->pid); if (pid) goto out; - current->signal->leader = 1; - __set_special_pids(current->pid, current->pid); - current->signal->tty = NULL; - current->signal->tty_old_pgrp = 0; - err = process_group(current); + group_leader->signal->leader = 1; + __set_special_pids(group_leader->pid, group_leader->pid); + group_leader->signal->tty = NULL; + group_leader->signal->tty_old_pgrp = 0; + err = process_group(group_leader); out: write_unlock_irq(&tasklist_lock); up(&tty_sem);