diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/exit.c | 30 | ||||
-rw-r--r-- | kernel/sys.c | 2 |
2 files changed, 16 insertions, 16 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index 42a8713b2050..96716fd22373 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -293,26 +293,27 @@ static void reparent_to_kthreadd(void) | |||
293 | switch_uid(INIT_USER); | 293 | switch_uid(INIT_USER); |
294 | } | 294 | } |
295 | 295 | ||
296 | void __set_special_pids(pid_t session, pid_t pgrp) | 296 | void __set_special_pids(struct pid *pid) |
297 | { | 297 | { |
298 | struct task_struct *curr = current->group_leader; | 298 | struct task_struct *curr = current->group_leader; |
299 | pid_t nr = pid_nr(pid); | ||
299 | 300 | ||
300 | if (task_session_nr(curr) != session) { | 301 | if (task_session(curr) != pid) { |
301 | detach_pid(curr, PIDTYPE_SID); | 302 | detach_pid(curr, PIDTYPE_SID); |
302 | set_task_session(curr, session); | 303 | attach_pid(curr, PIDTYPE_SID, pid); |
303 | attach_pid(curr, PIDTYPE_SID, find_pid(session)); | 304 | set_task_session(curr, nr); |
304 | } | 305 | } |
305 | if (task_pgrp_nr(curr) != pgrp) { | 306 | if (task_pgrp(curr) != pid) { |
306 | detach_pid(curr, PIDTYPE_PGID); | 307 | detach_pid(curr, PIDTYPE_PGID); |
307 | set_task_pgrp(curr, pgrp); | 308 | attach_pid(curr, PIDTYPE_PGID, pid); |
308 | attach_pid(curr, PIDTYPE_PGID, find_pid(pgrp)); | 309 | set_task_pgrp(curr, nr); |
309 | } | 310 | } |
310 | } | 311 | } |
311 | 312 | ||
312 | static void set_special_pids(pid_t session, pid_t pgrp) | 313 | static void set_special_pids(struct pid *pid) |
313 | { | 314 | { |
314 | write_lock_irq(&tasklist_lock); | 315 | write_lock_irq(&tasklist_lock); |
315 | __set_special_pids(session, pgrp); | 316 | __set_special_pids(pid); |
316 | write_unlock_irq(&tasklist_lock); | 317 | write_unlock_irq(&tasklist_lock); |
317 | } | 318 | } |
318 | 319 | ||
@@ -383,7 +384,11 @@ void daemonize(const char *name, ...) | |||
383 | */ | 384 | */ |
384 | current->flags |= PF_NOFREEZE; | 385 | current->flags |= PF_NOFREEZE; |
385 | 386 | ||
386 | set_special_pids(1, 1); | 387 | if (current->nsproxy != &init_nsproxy) { |
388 | get_nsproxy(&init_nsproxy); | ||
389 | switch_task_namespaces(current, &init_nsproxy); | ||
390 | } | ||
391 | set_special_pids(find_pid(1)); | ||
387 | proc_clear_tty(current); | 392 | proc_clear_tty(current); |
388 | 393 | ||
389 | /* Block and flush all signals */ | 394 | /* Block and flush all signals */ |
@@ -398,11 +403,6 @@ void daemonize(const char *name, ...) | |||
398 | current->fs = fs; | 403 | current->fs = fs; |
399 | atomic_inc(&fs->count); | 404 | atomic_inc(&fs->count); |
400 | 405 | ||
401 | if (current->nsproxy != init_task.nsproxy) { | ||
402 | get_nsproxy(init_task.nsproxy); | ||
403 | switch_task_namespaces(current, init_task.nsproxy); | ||
404 | } | ||
405 | |||
406 | exit_files(current); | 406 | exit_files(current); |
407 | current->files = init_task.files; | 407 | current->files = init_task.files; |
408 | atomic_inc(¤t->files->count); | 408 | atomic_inc(¤t->files->count); |
diff --git a/kernel/sys.c b/kernel/sys.c index e13bc518b444..c326d6dceee3 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
@@ -1065,7 +1065,7 @@ asmlinkage long sys_setsid(void) | |||
1065 | goto out; | 1065 | goto out; |
1066 | 1066 | ||
1067 | group_leader->signal->leader = 1; | 1067 | group_leader->signal->leader = 1; |
1068 | __set_special_pids(pid_nr(sid), pid_nr(sid)); | 1068 | __set_special_pids(sid); |
1069 | 1069 | ||
1070 | spin_lock(&group_leader->sighand->siglock); | 1070 | spin_lock(&group_leader->sighand->siglock); |
1071 | group_leader->signal->tty = NULL; | 1071 | group_leader->signal->tty = NULL; |