All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bradley Morgan <brads@mainlining.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Petr Mladek <pmladek@suse.com>,
	Jinchao Wang <wangjinchao600@gmail.com>,
	Craig Lamparter <craig.lamparter@hpe.com>,
	Wim Van Sebroeck <wim@linux-watchdog.org>,
	Guenter Roeck <linux@roeck-us.net>,
	linux-watchdog@vger.kernel.org, linux-kernel@vger.kernel.org,
	Bradley Morgan <brads@mainlining.org>
Subject: [PATCH v7 4/6] panic: restore variable arguments to nmi_panic()
Date: Wed, 16 Sep 2026 18:29:55 +0000	[thread overview]
Message-ID: <20260916182957.7788-5-brads@mainlining.org> (raw)
In-Reply-To: <20260916182957.7788-1-brads@mainlining.org>

nmi_panic() used to accept variable arguments until commit
ebc41f20d77f ("panic: change nmi_panic from macro to function")
flattened it to a final message string. vpanic() did not exist back
then, so the function had to format through panic("%s", msg).

Bring the variable arguments back and format with vpanic() directly.
The next patch makes nmi_panic() try the panic_force_cpu= redirect
before claiming panic_cpu, which needs the arguments twice: once to
format the message for the redirected CPU and once for vpanic() when
no redirect happens. Passing a final string would lose that.

No current caller passes a string with format specifiers. The closest
one is hpwdt_pretimeout(), which builds panic_msg with hex_byte_pack()
and has only two variants, both plain strings. But the new __printf()
annotation on nmi_panic() would warn with -Wformat-security there
because the buffer is passed directly as the format argument, so
switch it to nmi_panic(regs, "%s", panic_msg).

Suggested-by: Petr Mladek <pmladek@suse.com>
Signed-off-by: Bradley Morgan <brads@mainlining.org>
---
 drivers/watchdog/hpwdt.c |  2 +-
 include/linux/panic.h    |  3 ++-
 kernel/panic.c           | 10 ++++++++--
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c
index 8af1fad2de0b..78227d200afe 100644
--- a/drivers/watchdog/hpwdt.c
+++ b/drivers/watchdog/hpwdt.c
@@ -199,7 +199,7 @@ static int hpwdt_pretimeout(unsigned int ulReason, struct pt_regs *regs)
 	}
 
 	hex_byte_pack(panic_msg, nmistat);
-	nmi_panic(regs, panic_msg);
+	nmi_panic(regs, "%s", panic_msg);
 
 	return NMI_HANDLED;
 }
diff --git a/include/linux/panic.h b/include/linux/panic.h
index 98dd7dfd27de..17e61b61c45f 100644
--- a/include/linux/panic.h
+++ b/include/linux/panic.h
@@ -13,7 +13,8 @@ __printf(1, 2)
 void panic(const char *fmt, ...) __noreturn __cold;
 __printf(1, 0)
 void vpanic(const char *fmt, va_list args) __noreturn __cold;
-void nmi_panic(struct pt_regs *regs, const char *msg);
+__printf(2, 3)
+void nmi_panic(struct pt_regs *regs, const char *fmt, ...);
 void check_panic_on_warn(const char *origin);
 extern void oops_enter(void);
 extern void oops_exit(void);
diff --git a/kernel/panic.c b/kernel/panic.c
index 7388eb81a1c4..e240ca06faab 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -518,13 +518,19 @@ EXPORT_SYMBOL(panic_on_other_cpu);
  * nmi_panic_self_stop() which can provide architecture dependent code such
  * as saving register state for crash dump.
  */
-void nmi_panic(struct pt_regs *regs, const char *msg)
+void nmi_panic(struct pt_regs *regs, const char *fmt, ...)
 {
+	va_list args;
+
+	va_start(args, fmt);
+
 	if (panic_try_start())
-		panic("%s", msg);
+		vpanic(fmt, args);
 
 	if (panic_on_other_cpu())
 		nmi_panic_self_stop(regs);
+
+	va_end(args);
 }
 EXPORT_SYMBOL(nmi_panic);
 
-- 
2.47.3


  parent reply	other threads:[~2026-09-16 18:30 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-16 18:29 [PATCH v7 0/6] panic: fix panic_force_cpu= redirect races and NMI bypass Bradley Morgan
2026-09-16 18:29 ` [PATCH v7 1/6] panic: fix redirect CPU race in panic_try_force_cpu() Bradley Morgan
2026-09-16 18:42   ` sashiko-bot
2026-09-16 19:48     ` Bradley Morgan
2026-09-16 18:29 ` [PATCH v7 2/6] panic: flatten nmi_panic control flow Bradley Morgan
2026-09-16 18:29 ` [PATCH v7 3/6] panic: fix va_list reuse in panic_try_force_cpu() Bradley Morgan
2026-09-16 18:29 ` Bradley Morgan [this message]
2026-09-22 12:14   ` [PATCH v7 4/6] panic: restore variable arguments to nmi_panic() Petr Mladek
2026-09-16 18:29 ` [PATCH v7 5/6] panic: allow force_cpu redirect from an NMI Bradley Morgan
2026-09-16 18:29 ` [PATCH v7 6/6] panic: kill the "buffer unavailable" redirect fallback Bradley Morgan
2026-09-22 12:28   ` Petr Mladek
2026-09-22 12:35 ` [PATCH v7 0/6] panic: fix panic_force_cpu= redirect races and NMI bypass Petr Mladek
2026-09-22 14:41   ` Bradley Morgan
2026-09-22 23:22     ` Andrew Morton

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260916182957.7788-5-brads@mainlining.org \
    --to=brads@mainlining.org \
    --cc=akpm@linux-foundation.org \
    --cc=craig.lamparter@hpe.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-watchdog@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=pmladek@suse.com \
    --cc=wangjinchao600@gmail.com \
    --cc=wim@linux-watchdog.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.