Use change_pid() instead of detach_pid() + attach_pid() in __set_special_pids()
This way task_session() is not NULL in between.
Signed-off-by: Oleg Nesterov <[email protected]>
--- 25/kernel/exit.c~4_SETSID 2008-03-16 19:41:42.000000000 +0300
+++ 25/kernel/exit.c 2008-03-20 18:25:11.000000000 +0300
@@ -334,13 +334,11 @@ void __set_special_pids(struct pid *pid)
pid_t nr = pid_nr(pid);
if (task_session(curr) != pid) {
- detach_pid(curr, PIDTYPE_SID);
- attach_pid(curr, PIDTYPE_SID, pid);
+ change_pid(curr, PIDTYPE_SID, pid);
set_task_session(curr, nr);
}
if (task_pgrp(curr) != pid) {
- detach_pid(curr, PIDTYPE_PGID);
- attach_pid(curr, PIDTYPE_PGID, pid);
+ change_pid(curr, PIDTYPE_PGID, pid);
set_task_pgrp(curr, nr);
}
}