diff options
| author | Wolfram Sang <wsa@the-dreams.de> | 2020-01-15 18:31:37 +0100 |
|---|---|---|
| committer | Wolfram Sang <wsa@the-dreams.de> | 2020-01-15 18:31:37 +0100 |
| commit | d02e5ee09bd98b8cec9c2e26b486ed4d6d1b7e2a (patch) | |
| tree | 7cb6fa45fd1cb4bdad89c7b7832a72df893c838c /kernel/exit.c | |
| parent | 9f7a03642e0e25dc0561be124bddae2b8ed787ab (diff) | |
| parent | 24a49678f5e20f18006e71b90ac1531876b27eb1 (diff) | |
Merge branch 'i2c/for-current' into i2c/for-5.6
Diffstat (limited to 'kernel/exit.c')
| -rw-r--r-- | kernel/exit.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index bcbd59888e67..2833ffb0c211 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -517,10 +517,6 @@ static struct task_struct *find_child_reaper(struct task_struct *father, } write_unlock_irq(&tasklist_lock); - if (unlikely(pid_ns == &init_pid_ns)) { - panic("Attempted to kill init! exitcode=0x%08x\n", - father->signal->group_exit_code ?: father->exit_code); - } list_for_each_entry_safe(p, n, dead, ptrace_entry) { list_del_init(&p->ptrace_entry); @@ -766,6 +762,14 @@ void __noreturn do_exit(long code) acct_update_integrals(tsk); group_dead = atomic_dec_and_test(&tsk->signal->live); if (group_dead) { + /* + * If the last thread of global init has exited, panic + * immediately to get a useable coredump. + */ + if (unlikely(is_global_init(tsk))) + panic("Attempted to kill init! exitcode=0x%08x\n", + tsk->signal->group_exit_code ?: (int)code); + #ifdef CONFIG_POSIX_TIMERS hrtimer_cancel(&tsk->signal->real_timer); exit_itimers(tsk->signal); |
