Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp1577572ybl; Wed, 18 Dec 2019 22:32:15 -0800 (PST) X-Google-Smtp-Source: APXvYqz/VcfLSwNTO9YQWqj0o7+fs8fLbQGmkMkU9I3IRhCbJLWz77pz30onc4/mnXr3zKRCqMox X-Received: by 2002:a9d:1c95:: with SMTP id l21mr7028368ota.271.1576737135302; Wed, 18 Dec 2019 22:32:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576737135; cv=none; d=google.com; s=arc-20160816; b=knSaghtmIPEFrv+eosLUU1e71jXw6ai5O3dCUpCquFoBEmV3v8LPZFdk65d+jhh+6N 9ZpAJuSA6AlmTiSMaTWWKUlbA48GS/BpreTtbFIyfEbxKiDEu7GL46s5tbuMwgWdHWmT a9k74WvzTS7vhR3S2xsey63fZ6gjAQetSLYHWKKCuV/lfoC0qqblF6JBuWSVaGgMRwRZ 7GHWaqHeJf19H8af46qkWoaxzpb3rhZr3oEaW0xyichfC30fNym0Oghz5/cKUXssGs40 p0AfM9QrsTrAYBVXk1/9172UjcNtS5B6nDQ2tH8UQTYe920hMy8T81wKm3vSX7ECU9t0 djig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=o0Z0PdCY/AlFHef0+0Esdi5iDxbdo7YqxSYlU8fJbE4=; b=vB7JGEaxrRiYF2G6eRM7qSMRNp8+S4BTmZrDXXq9aDUCyh7epavSv9akFX0yjRUzHx njfkPJbibNIuR6BQdbg48nUpq1DZ5rH8E9UPGaRptleVB02vMV7XyhwUmmW6bVVowUcv nqcth5pcbmUi4n15DCTCRrLPeYrzXc7m9/UZOE3ARSm/pX7GBxf8OlKA6zNVAKp7bc6u ZX8p2TV72loRe0gTGZybHf+RP1nJrBHgdF3ekEYdwGmtJ2ryjTr0H0FtcrKCQLQWt2IT oUp9GWBQFDhAuz0wrHlkbBCOS4R6xCnscouNmT1CY+l8z1/oCgLRrnw2BmcmzXG19Kmc InIA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=jwFzhoYw; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i185si2746121oia.187.2019.12.18.22.32.03; Wed, 18 Dec 2019 22:32:15 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=jwFzhoYw; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726439AbfLSGaB (ORCPT + 99 others); Thu, 19 Dec 2019 01:30:01 -0500 Received: from mail-pf1-f196.google.com ([209.85.210.196]:40684 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725996AbfLSGaB (ORCPT ); Thu, 19 Dec 2019 01:30:01 -0500 Received: by mail-pf1-f196.google.com with SMTP id q8so2612352pfh.7 for ; Wed, 18 Dec 2019 22:30:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=o0Z0PdCY/AlFHef0+0Esdi5iDxbdo7YqxSYlU8fJbE4=; b=jwFzhoYwdc9HtucR6mJjAQAG0JREF3qvTM/urqi/hLiZAT7WFrUzPTG0Q+kqqTPZH7 S0x7uL43FydWWgCS6GrVKwICSK+y++iw5VHpdVH0cgtN5e0fn7S22qfejAQ/lRQYfLdk uLZwEaWMv2Gwf2YMRlLH/fA2HP7wnv2QWXQi3O2r4gjyNo+PYbufFzc9KfzyFlpTKfjq CW4wy/uHFOfgIEkS8F8d7rLAT22PX88yLP8b07reD3AapYCc7R02Fo+weldfFABkl/DZ rQK/9ni51B8U7F+dIex09nzM1FXMNYPv8Dj8I2CHHmd63CqP267g+eyKnCw8qihz3X0m F1CA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=o0Z0PdCY/AlFHef0+0Esdi5iDxbdo7YqxSYlU8fJbE4=; b=VQKDTdIbkISi96fCz9AjyFfP1cCidskBmpz0bI5T6fwsVuMLKcMn2fDgc9WaqGIFg3 SrCjMU9aNZerSyjlF5ENbV+ThHzFbM3NtfJ7xZ9HblYiO/V7nn1M3GNWGJwYMXFYgYaz z8MRbW3UssdQv1rICl4syMr0ERa+xU1Q6DdFtPjKzCJUcQV4XsQ/T8RXhgX0tQ6qWN6i APsvtYYwc6teets306RQ+QTuJa7gsKWUCI9yb3FTrmnJdQ8dIvq45ApK7Ex0r4pLBNUK 2HdgJm/zG5Z8/vCwkEZ9HEJsLCieeCbZSKQm2wwumqqxlGbJnIUTf4lS2HQ/N9IWZdJT Gu1g== X-Gm-Message-State: APjAAAXwb8j6lHrVv45kpR631M+peoKY68g+gVnVlgI154FYcZkAyIm4 yZ374gOenPJOhej8MzXc5bQ= X-Received: by 2002:a62:ed19:: with SMTP id u25mr8005031pfh.173.1576737000557; Wed, 18 Dec 2019 22:30:00 -0800 (PST) Received: from localhost ([43.224.245.179]) by smtp.gmail.com with ESMTPSA id h26sm6584696pfr.9.2019.12.18.22.29.59 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Wed, 18 Dec 2019 22:30:00 -0800 (PST) From: qiwuchen55@gmail.com To: christian.brauner@ubuntu.com, peterz@infradead.org, mingo@kernel.org, oleg@redhat.com, prsood@codeaurora.org Cc: kernel-team@android.com, linux-kernel@vger.kernel.org, chenqiwu@xiaomi.com Subject: [PATCH v3] kernel/exit: do panic earlier to get coredump if global init task exit Date: Thu, 19 Dec 2019 14:29:53 +0800 Message-Id: <1576736993-10121-1-git-send-email-qiwuchen55@gmail.com> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: chenqiwu When global init task get a chance to be killed, panic will happen in later calling steps by do_exit()->exit_notify()->forget_original_parent() ->find_child_reaper() if all init threads have exited. However, it's hard to extract the coredump of init task from a kernel crashdump, since exit_mm() has released its mm before panic. In order to get the backtrace of init task in userspace, it's better to do panic earlier at the beginning of exitting route. It's worth noting that we must take case of a multi-threaded init exitting issue. We need the test for is_global_init() && group_dead to ensure that it is all threads exiting and not just the current thread. Signed-off-by: chenqiwu --- changes in v3: - move panic into group_dead condition. - keep exitcode as the original code does. - fix logic error for comment. --- kernel/exit.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/kernel/exit.c b/kernel/exit.c index bcbd598..7271e13 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,15 @@ 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 exit, do panic + * immeddiately to get the coredump to find any clue + * for init task in userspace. + */ + 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); -- 1.9.1