pidns: Consolidate initialzation of special init task state
authorEric W. Biederman <ebiederm@xmission.com>
Tue, 13 Jul 2010 00:10:36 +0000 (17:10 -0700)
committerEric W. Biederman <ebiederm@xmission.com>
Mon, 19 Nov 2012 13:59:15 +0000 (05:59 -0800)
Instead of setting child_reaper and SIGNAL_UNKILLABLE one way
for the system init process, and another way for pid namespace
init processes test pid->nr == 1 and use the same code for both.

For the global init this results in SIGNAL_UNKILLABLE being set
much earlier in the initialization process.

This is a small cleanup and it paves the way for allowing unshare and
enter of the pid namespace as that path like our global init also will
not set CLONE_NEWPID.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
init/main.c
kernel/fork.c

index 9cf77ab138a68738bb6926b8b31aaf6ba8cd4f6e..317750a18f74c87be9023bcc42bdbc4cb58c1177 100644 (file)
@@ -810,7 +810,6 @@ static int __ref kernel_init(void *unused)
        system_state = SYSTEM_RUNNING;
        numa_default_policy();
 
-       current->signal->flags |= SIGNAL_UNKILLABLE;
        flush_delayed_fput();
 
        if (ramdisk_execute_command) {
index 666dc8b06606b3ffb336fe495c73731b859b2635..0f2bbce311fc017108b480fdc8613fce3f857fdb 100644 (file)
@@ -1039,8 +1039,6 @@ static int copy_signal(unsigned long clone_flags, struct task_struct *tsk)
        atomic_set(&sig->live, 1);
        atomic_set(&sig->sigcnt, 1);
        init_waitqueue_head(&sig->wait_chldexit);
-       if (clone_flags & CLONE_NEWPID)
-               sig->flags |= SIGNAL_UNKILLABLE;
        sig->curr_target = tsk;
        init_sigpending(&sig->shared_pending);
        INIT_LIST_HEAD(&sig->posix_timers);
@@ -1441,8 +1439,10 @@ static struct task_struct *copy_process(unsigned long clone_flags,
                ptrace_init_task(p, (clone_flags & CLONE_PTRACE) || trace);
 
                if (thread_group_leader(p)) {
-                       if (is_child_reaper(pid))
+                       if (is_child_reaper(pid)) {
                                ns_of_pid(pid)->child_reaper = p;
+                               p->signal->flags |= SIGNAL_UNKILLABLE;
+                       }
 
                        p->signal->leader_pid = pid;
                        p->signal->tty = tty_kref_get(current->signal->tty);