From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id DBCEBC3DA59 for ; Fri, 19 Jul 2024 17:33:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 56EA46B0092; Fri, 19 Jul 2024 13:33:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 545D86B0095; Fri, 19 Jul 2024 13:33:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3BF2C6B0096; Fri, 19 Jul 2024 13:33:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 183D96B0092 for ; Fri, 19 Jul 2024 13:33:37 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 7C846807FD for ; Fri, 19 Jul 2024 17:33:36 +0000 (UTC) X-FDA: 82357199232.14.31ACDEF Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by imf02.hostedemail.com (Postfix) with ESMTP id 8E48E8002E for ; Fri, 19 Jul 2024 17:33:34 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=linux.microsoft.com header.s=default header.b=eZIYww7n; dmarc=pass (policy=none) header.from=linux.microsoft.com; spf=pass (imf02.hostedemail.com: domain of apais@linux.microsoft.com designates 13.77.154.182 as permitted sender) smtp.mailfrom=apais@linux.microsoft.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1721410380; a=rsa-sha256; cv=none; b=AHRpZ3cTd1x4AbwvDqOT0Iwp/QLgV+wLdaykgIwPblbX87ZdEYD2EcstT5DwxsHEICWBCp Aek24gLvPgYnHli2i4gJTysFsbTFYYH32K06W3VO2nANDblGctig25n53tO8SxKaRHxzMr q1iTUSaQjDmWtRlEXRgK1R5nxzYccQE= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=linux.microsoft.com header.s=default header.b=eZIYww7n; dmarc=pass (policy=none) header.from=linux.microsoft.com; spf=pass (imf02.hostedemail.com: domain of apais@linux.microsoft.com designates 13.77.154.182 as permitted sender) smtp.mailfrom=apais@linux.microsoft.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1721410380; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=rAKcklR6ZEiiNTgJ1EeBhwWqjS03bUghrIh/qcEZsVc=; b=OyeRkg4LrmuPcTz4lDondZVtnIaWbOmtBJkj/nXhybRtl9gLLsyGbJInPx6CrRJDr5zU0O zs7Tc88JPXU4j+k5WktTuD74TzvpMTqCI3/si8c7JLtssP6yPoSmlKCUiXbY6/8lLF5UNx qM3bL7QBhix/CB6hcVLl/6AVGRVSyn4= Received: from smtpclient.apple (d66-183-91-182.bchsia.telus.net [66.183.91.182]) by linux.microsoft.com (Postfix) with ESMTPSA id 292DB20B7165; Fri, 19 Jul 2024 10:33:33 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 292DB20B7165 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1721410413; bh=rAKcklR6ZEiiNTgJ1EeBhwWqjS03bUghrIh/qcEZsVc=; h=From:Subject:Date:In-Reply-To:Cc:To:References:From; b=eZIYww7nlHkkzn5gkEc4ZmUd4EdyrMeydsCcpYAW0eT1J7LpuCVwzNUSujzYVUgBU 8R5oF3sAOJKKH4JJ2kOY6Np51YXwBSMqkQJjnVml1SiHSb2gu4hIuvbyrfUus7gZGh +e8DAK7U531D/LRTCh8Gzg/6T546JeVFngnsJQes= From: Allen Pais Message-Id: <1AEC6E18-313E-495F-AEE7-9C6C9DB3BAEA@linux.microsoft.com> Content-Type: multipart/alternative; boundary="Apple-Mail=_42B033C9-17EF-4A47-BF1A-ED07BE676EBC" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.600.62\)) Subject: Re: [PATCH v3 1/2] coredump: Standartize and fix logging Date: Fri, 19 Jul 2024 10:33:22 -0700 In-Reply-To: <20240718182743.1959160-2-romank@linux.microsoft.com> Cc: akpm@linux-foundation.org, ardb@kernel.org, bigeasy@linutronix.de, brauner@kernel.org, ebiederm@xmission.com, jack@suse.cz, Kees Cook , linux-fsdevel@vger.kernel.org, Linux Kernel Mailing List , linux-mm@kvack.org, nagvijay@microsoft.com, oleg@redhat.com, tandersen@netflix.com, vincent.whitchurch@axis.com, viro@zeniv.linux.org.uk, Allen Pais , benhill@microsoft.com, ssengar@microsoft.com, sunilmut@microsoft.com, vdso@hexbites.dev To: Roman Kisel References: <20240718182743.1959160-1-romank@linux.microsoft.com> <20240718182743.1959160-2-romank@linux.microsoft.com> X-Mailer: Apple Mail (2.3774.600.62) X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 8E48E8002E X-Stat-Signature: 9q31z3mo7oyfob9m5s3dzfbjnwzanpm6 X-Rspam-User: X-HE-Tag: 1721410414-537713 X-HE-Meta: U2FsdGVkX199tNm9oYiRcRhWdCZ62hXD8PCU0DPEv5wHU5p0He4vNmC5Xk73xedyc7AyXkerSbLvDkFmLBV5O+szBrB40NLMSnpOdeQQ+pa0ri5X/NVehPiElKshZTP+OXRlJToP7EGXkMZwmmRPce8Qh4o/wUs63XDKF0KiJ+vG25kqikrBjRK/M377ZH0B0GGDUvbtfiVgIhXr+0lMEvEwHbmQKcTMqcIgBiipfPqx/QTARfEB1J2GhlYZGFPwXBkepVfsiolrgM/KoE+KF118ptYxiWY4SjzecV3GXQrtjHNEIT6VsvlDiE9KkRWs/J68FVP18lHieex0A8SS7C73xUQCa/UXddV1GMou1Roynlh53Ex4Gh4snNnP+taZjGibjAtsKUxoi5Dyx1qC4DBslgcFIaS1vbjXs5WsSeLlpUa4Qsfmf1dt4yr1UFkjaM1SHT0voiYZ4K0P/wXDrCeJHRyCidNtmEAyFAZ9rgXIJTgeyJ/pB5B8QRxsxki+YILjlWnW2o3vIQXXmfy247ot1hkf1pxRyemZ6jxepjZk50XVMGqkm0mYW+cg/5CxXHPxjqe4Av2dECp81SEfjAfrHrUyYEl8Z5vBs5frjhsWfkaQ7OaP0J9Bz13ZRnEgQHorszDJ2Z8K/0tBiF5eIAKwrHqyhHKBn7ZD7y3UUqCxgSVBptabbITTw3oskLT0SHQmAwCcBiS7t9cxDcuk/yRVge3Ewf0rXk8HDmkO+nj5ghq3OQhDlZQje71maxuI09bOS3uwHXub12brHOL/e1458arwHO2fL1obiIyDZf24WfLDKKUWCGpNnP569a0+BgRqy7yQB8yI8nD/jM9D5tM+oSxxVb6kX8x4CpU2RqmK0HZajvSWdCV1V9uqLU3UaBqqwEvMvGQYHrUd3p9oiEd/kmMeJ+9cw1EKi8BLpIM2SEGX1UWNQmw465DeK8oWjvS2OUphdLmBZ10JwOt fPwq1rj9 pjBVlw0tUJlUDLKzmbjJ82FGA2E72WTOWEGIt5Bi38gS3UnWMlmKY5rU6hJjoUxC0uptp0ObqAutSfgBiJHzR8mMSqk0ZoNT/jowHEdGcapDUnTohE3104KGAduGtTIxoFDcYXkcHRIPkuP1c8ZzhvW5pk9Y5vGGBzWN+xuzdqFMfi4bsyRH/pHOZzRyILYyKM0uoaub1MlVfwJOVp6T5dLsgXcCDVHrJRep+hSdw1aMKMLEOMyKBRGMtT1+wBteLMXjhyiJwDKfSe6GOA751EPR/I2437V4bg4C1rMPikc51mrWEt3KFR0JYC9Uhvh75+Czfiy40qtNGuIy28pvMcgMrkEZl7AdF0oKDET6D3Dvzmt05VWhiWKvq87S1BwwUScNdgSWBq7uRDNNv2ukmuIzyf4xTiH+LG1aMNn86ylVW52CZIZVHbZo9OUCw/juGQ/NkyXcInEyBAecBBUvU5r1DrA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: --Apple-Mail=_42B033C9-17EF-4A47-BF1A-ED07BE676EBC Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Jul 18, 2024, at 11:27=E2=80=AFAM, Roman Kisel = wrote: >=20 > The coredump code does not log the process ID and the comm > consistently, logs unescaped comm when it does log it, and > does not always use the ratelimited logging. That makes it > harder to analyze logs and puts the system at the risk of > spamming the system log incase something crashes many times > over and over again. >=20 > Fix that by logging TGID and comm (escaped) consistently and > using the ratelimited logging always. >=20 > Signed-off-by: Roman Kisel LGTM.=20 Tested-by: Allen Pais > Thanks. > --- > fs/coredump.c | 43 +++++++++++++++------------------------- > include/linux/coredump.h | 22 ++++++++++++++++++++ > 2 files changed, 38 insertions(+), 27 deletions(-) >=20 > diff --git a/fs/coredump.c b/fs/coredump.c > index a57a06b80f57..19d3343b93c6 100644 > --- a/fs/coredump.c > +++ b/fs/coredump.c > @@ -586,8 +586,7 @@ void do_coredump(const kernel_siginfo_t *siginfo) > struct subprocess_info *sub_info; >=20 > if (ispipe < 0) { > - printk(KERN_WARNING "format_corename failed\n"); > - printk(KERN_WARNING "Aborting core\n"); > + coredump_report_failure("format_corename failed, = aborting core"); > goto fail_unlock; > } >=20 > @@ -607,27 +606,21 @@ void do_coredump(const kernel_siginfo_t = *siginfo) > * right pid if a thread in a multi-threaded > * core_pattern process dies. > */ > - printk(KERN_WARNING > - "Process %d(%s) has RLIMIT_CORE set to = 1\n", > - task_tgid_vnr(current), current->comm); > - printk(KERN_WARNING "Aborting core\n"); > + coredump_report_failure("RLIMIT_CORE is set to = 1, aborting core"); > goto fail_unlock; > } > cprm.limit =3D RLIM_INFINITY; >=20 > dump_count =3D atomic_inc_return(&core_dump_count); > if (core_pipe_limit && (core_pipe_limit < dump_count)) { > - printk(KERN_WARNING "Pid %d(%s) over = core_pipe_limit\n", > - task_tgid_vnr(current), current->comm); > - printk(KERN_WARNING "Skipping core dump\n"); > + coredump_report_failure("over core_pipe_limit, = skipping core dump"); > goto fail_dropcount; > } >=20 > helper_argv =3D kmalloc_array(argc + 1, = sizeof(*helper_argv), > GFP_KERNEL); > if (!helper_argv) { > - printk(KERN_WARNING "%s failed to allocate = memory\n", > - __func__); > + coredump_report_failure("%s failed to allocate = memory", __func__); > goto fail_dropcount; > } > for (argi =3D 0; argi < argc; argi++) > @@ -644,8 +637,7 @@ void do_coredump(const kernel_siginfo_t *siginfo) >=20 > kfree(helper_argv); > if (retval) { > - printk(KERN_INFO "Core dump to |%s pipe = failed\n", > - cn.corename); > + coredump_report_failure("|%s pipe failed", = cn.corename); > goto close_fail; > } > } else { > @@ -658,10 +650,8 @@ void do_coredump(const kernel_siginfo_t *siginfo) > goto fail_unlock; >=20 > if (need_suid_safe && cn.corename[0] !=3D '/') { > - printk(KERN_WARNING "Pid %d(%s) can only dump = core "\ > - "to fully qualified path!\n", > - task_tgid_vnr(current), current->comm); > - printk(KERN_WARNING "Skipping core dump\n"); > + coredump_report_failure( > + "this process can only dump core to a = fully qualified path, skipping core dump"); > goto fail_unlock; > } >=20 > @@ -730,13 +720,13 @@ void do_coredump(const kernel_siginfo_t = *siginfo) > idmap =3D file_mnt_idmap(cprm.file); > if (!vfsuid_eq_kuid(i_uid_into_vfsuid(idmap, inode), > current_fsuid())) { > - pr_info_ratelimited("Core dump to %s aborted: = cannot preserve file owner\n", > - cn.corename); > + coredump_report_failure("Core dump to %s = aborted: " > + "cannot preserve file owner", = cn.corename); > goto close_fail; > } > if ((inode->i_mode & 0677) !=3D 0600) { > - pr_info_ratelimited("Core dump to %s aborted: = cannot preserve file permissions\n", > - cn.corename); > + coredump_report_failure("Core dump to %s = aborted: " > + "cannot preserve file permissions", = cn.corename); > goto close_fail; > } > if (!(cprm.file->f_mode & FMODE_CAN_WRITE)) > @@ -757,7 +747,7 @@ void do_coredump(const kernel_siginfo_t *siginfo) > * have this set to NULL. > */ > if (!cprm.file) { > - pr_info("Core dump to |%s disabled\n", = cn.corename); > + coredump_report_failure("Core dump to |%s = disabled", cn.corename); > goto close_fail; > } > if (!dump_vma_snapshot(&cprm)) > @@ -983,11 +973,10 @@ void validate_coredump_safety(void) > { > if (suid_dumpable =3D=3D SUID_DUMP_ROOT && > core_pattern[0] !=3D '/' && core_pattern[0] !=3D '|') { > - pr_warn( > -"Unsafe core_pattern used with fs.suid_dumpable=3D2.\n" > -"Pipe handler or fully qualified core dump path required.\n" > -"Set kernel.core_pattern before fs.suid_dumpable.\n" > - ); > + > + coredump_report_failure("Unsafe core_pattern used with = fs.suid_dumpable=3D2: " > + "pipe handler or fully qualified core dump path = required. " > + "Set kernel.core_pattern before = fs.suid_dumpable."); > } > } >=20 > diff --git a/include/linux/coredump.h b/include/linux/coredump.h > index 0904ba010341..45e598fe3476 100644 > --- a/include/linux/coredump.h > +++ b/include/linux/coredump.h > @@ -43,8 +43,30 @@ extern int dump_align(struct coredump_params *cprm, = int align); > int dump_user_range(struct coredump_params *cprm, unsigned long start, > unsigned long len); > extern void do_coredump(const kernel_siginfo_t *siginfo); > + > +/* > + * Logging for the coredump code, ratelimited. > + * The TGID and comm fields are added to the message. > + */ > + > +#define __COREDUMP_PRINTK(Level, Format, ...) \ > + do { \ > + char comm[TASK_COMM_LEN]; \ > + \ > + get_task_comm(comm, current); \ > + printk_ratelimited(Level "coredump: %d(%*pE): " Format = "\n", \ > + task_tgid_vnr(current), (int)strlen(comm), comm, = ##__VA_ARGS__); \ > + } while (0) \ > + > +#define coredump_report(fmt, ...) __COREDUMP_PRINTK(KERN_INFO, fmt, = ##__VA_ARGS__) > +#define coredump_report_failure(fmt, ...) = __COREDUMP_PRINTK(KERN_WARNING, fmt, ##__VA_ARGS__) > + > #else > static inline void do_coredump(const kernel_siginfo_t *siginfo) {} > + > +#define coredump_report(...) > +#define coredump_report_failure(...) > + > #endif >=20 > #if defined(CONFIG_COREDUMP) && defined(CONFIG_SYSCTL) > --=20 > 2.45.2 --Apple-Mail=_42B033C9-17EF-4A47-BF1A-ED07BE676EBC Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8

On Jul 18, 2024, at 11:27=E2=80=AFAM, Roman Kisel = <romank@linux.microsoft.com> wrote:

The coredump code does not = log the process ID and the comm
consistently, logs unescaped comm = when it does log it, and
does not always use the ratelimited logging. = That makes it
harder to analyze logs and puts the system at the risk = of
spamming the system log incase something crashes many = times
over and over again.

Fix that by logging TGID and comm = (escaped) consistently and
using the ratelimited logging = always.

Signed-off-by: Roman Kisel = <romank@linux.microsoft.com>

LGTM. 

Tested-by: Allen Pais = <apais@linux.microsoft.com>= ;

Thanks.


---
fs/coredump.c =            | 43 = +++++++++++++++-------------------------
include/linux/coredump.h | = 22 ++++++++++++++++++++
2 files changed, 38 insertions(+), 27 = deletions(-)

diff --git a/fs/coredump.c b/fs/coredump.c
index = a57a06b80f57..19d3343b93c6 100644
--- a/fs/coredump.c
+++ = b/fs/coredump.c
@@ -586,8 +586,7 @@ void do_coredump(const = kernel_siginfo_t *siginfo)
struct subprocess_info = *sub_info;

if (ispipe < 0) {
- = printk(KERN_WARNING "format_corename failed\n");
- = printk(KERN_WARNING "Aborting core\n");
+ = coredump_report_failure("format_corename failed, aborting = core");
= = = goto fail_unlock;
}

@@ -607,27 +606,21 @@ = void do_coredump(const kernel_siginfo_t *siginfo)
* right = pid if a thread in a multi-threaded
* core_pattern process dies.
= = = = */
- = = = printk(KERN_WARNING
- "Process %d(%s) has RLIMIT_CORE = set to 1\n",
-= = = = task_tgid_vnr(current), current->comm);
- = printk(KERN_WARNING "Aborting core\n");
+ = coredump_report_failure("RLIMIT_CORE is set to 1, aborting = core");
= = = goto fail_unlock;
}
= cprm.limit =3D RLIM_INFINITY;

= dump_count =3D atomic_inc_return(&core_dump_count);
if = (core_pipe_limit && (core_pipe_limit < dump_count)) = {
- = = = printk(KERN_WARNING "Pid %d(%s) over = core_pipe_limit\n",
- =       task_tgid_vnr(current), = current->comm);
- printk(KERN_WARNING "Skipping = core dump\n");
+ coredump_report_failure("over = core_pipe_limit, skipping core dump");
goto fail_dropcount;
}

= = = helper_argv =3D kmalloc_array(argc + 1, sizeof(*helper_argv),
= = = = = =    GFP_KERNEL);
if (!helper_argv) {
- = printk(KERN_WARNING "%s failed to allocate memory\n",
- =       __func__);
+ = coredump_report_failure("%s failed to allocate memory", = __func__);
= = = goto fail_dropcount;
}
for (argi = =3D 0; argi < argc; argi++)
@@ -644,8 +637,7 @@ void = do_coredump(const kernel_siginfo_t *siginfo)

= kfree(helper_argv);
if (retval) {
- = printk(KERN_INFO "Core dump to |%s pipe failed\n",
- =       cn.corename);
+ = coredump_report_failure("|%s pipe failed", cn.corename);
= = = = goto close_fail;
}
} else = {
@@ -658,10 +650,8 @@ void do_coredump(const kernel_siginfo_t = *siginfo)
= = = goto fail_unlock;

if (need_suid_safe && = cn.corename[0] !=3D '/') {
- printk(KERN_WARNING "Pid %d(%s) = can only dump core "\
- "to fully qualified = path!\n",
- = = = = task_tgid_vnr(current), current->comm);
- = printk(KERN_WARNING "Skipping core dump\n");
+ = coredump_report_failure(
+ "this process can only dump core = to a fully qualified path, skipping core dump");
goto = fail_unlock;
= = }

@@ -730,13 +720,13 @@ void do_coredump(const = kernel_siginfo_t *siginfo)
idmap =3D = file_mnt_idmap(cprm.file);
if = (!vfsuid_eq_kuid(i_uid_into_vfsuid(idmap, inode),
=    current_fsuid())) {
- pr_info_ratelimited("Core dump to = %s aborted: cannot preserve file owner\n",
- =    cn.corename);
+ coredump_report_failure("Core = dump to %s aborted: "
+ "cannot preserve file owner", = cn.corename);
goto close_fail;
}
= = = if ((inode->i_mode & 0677) !=3D 0600) {
- = pr_info_ratelimited("Core dump to %s aborted: cannot preserve = file permissions\n",
- =    cn.corename);
+ coredump_report_failure("Core = dump to %s aborted: "
+ "cannot preserve file = permissions", cn.corename);
goto close_fail;
}
= = = if (!(cprm.file->f_mode & FMODE_CAN_WRITE))
@@ -757,7 = +747,7 @@ void do_coredump(const kernel_siginfo_t *siginfo)
* have = this set to NULL.
*/
if = (!cprm.file) {
- pr_info("Core dump to |%s = disabled\n", cn.corename);
+ coredump_report_failure("Core = dump to |%s disabled", cn.corename);
goto close_fail;
}
= = = if (!dump_vma_snapshot(&cprm))
@@ -983,11 +973,10 @@ void = validate_coredump_safety(void)
{
if (suid_dumpable =3D=3D = SUID_DUMP_ROOT &&
=    core_pattern[0] !=3D '/' && core_pattern[0] !=3D= '|') {
- = = pr_warn(
-"Unsafe core_pattern used with = fs.suid_dumpable=3D2.\n"
-"Pipe handler or fully qualified core dump = path required.\n"
-"Set kernel.core_pattern before = fs.suid_dumpable.\n"
- );
+
+ = coredump_report_failure("Unsafe core_pattern used with = fs.suid_dumpable=3D2: "
+ "pipe handler or fully qualified = core dump path required. "
+ "Set kernel.core_pattern before = fs.suid_dumpable.");
}
}

diff --git = a/include/linux/coredump.h b/include/linux/coredump.h
index = 0904ba010341..45e598fe3476 100644
--- = a/include/linux/coredump.h
+++ b/include/linux/coredump.h
@@ -43,8 = +43,30 @@ extern int dump_align(struct coredump_params *cprm, int = align);
int dump_user_range(struct coredump_params *cprm, unsigned = long start,
= =    unsigned long len);
extern void = do_coredump(const kernel_siginfo_t *siginfo);
+
+/*
+ * Logging = for the coredump code, ratelimited.
+ * The TGID and comm fields are = added to the message.
+ */
+
+#define __COREDUMP_PRINTK(Level, = Format, ...) \
+ do { \
+ char = comm[TASK_COMM_LEN]; \
+ = \
+ = = get_task_comm(comm, current); \
+ = printk_ratelimited(Level "coredump: %d(%*pE): " Format "\n", = \
+ = = = task_tgid_vnr(current), (int)strlen(comm), comm, = ##__VA_ARGS__); = \
+ = } while (0) \
+
+#define = coredump_report(fmt, ...) __COREDUMP_PRINTK(KERN_INFO, fmt, = ##__VA_ARGS__)
+#define coredump_report_failure(fmt, ...) = __COREDUMP_PRINTK(KERN_WARNING, fmt, ##__VA_ARGS__)
+
#else
= static inline void do_coredump(const kernel_siginfo_t *siginfo) = {}
+
+#define coredump_report(...)
+#define = coredump_report_failure(...)
+
#endif

#if = defined(CONFIG_COREDUMP) && defined(CONFIG_SYSCTL)
-- =
2.45.2

= --Apple-Mail=_42B033C9-17EF-4A47-BF1A-ED07BE676EBC--