--- linux-2.6.11.6-vs1.9.5.6/kernel/exit.c 2005-04-01 01:31:57 +0200 +++ linux-2.6.11.6-vs1.9.5.7/kernel/exit.c 2005-04-04 02:58:59 +0200 @@ -255,26 +255,26 @@ void reparent_to_init(void) switch_uid(INIT_USER); } -void __set_special_pids(pid_t session, pid_t pgrp) +void __set_special_task_pids(struct task_struct *task, + pid_t session, pid_t pgrp) { - struct task_struct *curr = current; - - if (curr->signal->session != session) { - detach_pid(curr, PIDTYPE_SID); - curr->signal->session = session; - attach_pid(curr, PIDTYPE_SID, session); + if (task->signal->session != session) { + detach_pid(task, PIDTYPE_SID); + task->signal->session = session; + attach_pid(task, PIDTYPE_SID, session); } - if (process_group(curr) != pgrp) { - detach_pid(curr, PIDTYPE_PGID); - curr->signal->pgrp = pgrp; - attach_pid(curr, PIDTYPE_PGID, pgrp); + if (process_group(task) != pgrp) { + detach_pid(task, PIDTYPE_PGID); + task->signal->pgrp = pgrp; + attach_pid(task, PIDTYPE_PGID, pgrp); } } -void set_special_pids(pid_t session, pid_t pgrp) +void set_special_task_pids(struct task_struct *task, + pid_t session, pid_t pgrp) { write_lock_irq(&tasklist_lock); - __set_special_pids(session, pgrp); + __set_special_task_pids(task, session, pgrp); write_unlock_irq(&tasklist_lock); } @@ -340,7 +340,7 @@ void daemonize(const char *name, ...) */ exit_mm(current); - set_special_pids(1, 1); + set_special_task_pids(current, 1, 1); down(&tty_sem); current->signal->tty = NULL; up(&tty_sem); --- linux-2.6.11.6-vs1.9.5.6/kernel/sys.c 2005-04-01 01:31:57 +0200 +++ linux-2.6.11.6-vs1.9.5.7/kernel/sys.c 2005-04-04 02:59:18 +0200 @@ -1098,7 +1098,7 @@ asmlinkage long sys_setsid(void) goto out; current->signal->leader = 1; - __set_special_pids(current->pid, current->pid); + __set_special_task_pids(current, current->pid, current->pid); current->signal->tty = NULL; current->signal->tty_old_pgrp = 0; err = process_group(current); --- linux-2.6.11.6-vs1.9.5.6/kernel/vserver/context.c 2005-04-01 01:31:57 +0200 +++ linux-2.6.11.6-vs1.9.5.7/kernel/vserver/context.c 2005-04-04 02:59:39 +0200 @@ -590,6 +590,7 @@ int vx_set_init(struct vx_info *vxi, str vxi, vxi->vx_id, p, p->xid, p->pid, p->tgid); vxi->vx_initpid = p->tgid; + set_special_task_pids(p, 0, 0); return 0; }