From: "Paul E. McKenney" <paulmck@kernel.org>
To: akpm@linux-foundation.org, adobriyan@gmail.com, mhiramat@kernel.org
Cc: arnd@kernel.org, ndesaulniers@google.com, paulmck@kernel.org,
sfr@canb.auug.org.au, linux-fsdevel@vger.kernel.org,
linux-kernel@vger.kernel.org, kernel-team@meta.com
Subject: [PATCH RFC bootconfig] 2/2] fs/proc: Add /proc/cmdline_image for embedded arguments
Date: Thu, 27 Jul 2023 20:37:01 -0700 [thread overview]
Message-ID: <20230728033701.817094-2-paulmck@kernel.org> (raw)
In-Reply-To: <197cba95-3989-4d2f-a9f1-8b192ad08c49@paulmck-laptop>
In kernels built with CONFIG_BOOT_CONFIG_FORCE=y, /proc/cmdline will show
all kernel boot parameters, both those supplied by the boot loader and
those embedded in the kernel image. This works well for those who just
want to see all of the kernel boot parameters, but is not helpful to those
who need to see only those parameters that were embedded into the kernel
image. This is especially important in situations where there are many
kernel images for different kernel versions and kernel configurations,
all of which opens the door to a great deal of human error.
Therefore, provide a /proc/cmdline_image file that shows only those kernel
boot parameters that were embedded in the kernel image. The output
is in boot-image format, which allows easy reconcilation against the
boot-config source file.
Why put this in /proc? Because it is quite similar to /proc/cmdline, so
it makes sense to put it in the same place that /proc/cmdline is located.
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Alexey Dobriyan <adobriyan@gmail.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: <linux-fsdevel@vger.kernel.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
---
fs/proc/cmdline.c | 12 ++++++++++++
include/linux/init.h | 11 ++++++-----
init/main.c | 9 +++++++++
3 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/fs/proc/cmdline.c b/fs/proc/cmdline.c
index 1d0ef9d2949d..4ab5223198cb 100644
--- a/fs/proc/cmdline.c
+++ b/fs/proc/cmdline.c
@@ -20,6 +20,15 @@ static int cmdline_load_proc_show(struct seq_file *m, void *v)
return 0;
}
+static int cmdline_image_proc_show(struct seq_file *m, void *v)
+{
+#ifdef CONFIG_BOOT_CONFIG_FORCE
+ seq_puts(m, saved_bootconfig_string);
+ seq_putc(m, '\n');
+#endif
+ return 0;
+}
+
static int __init proc_cmdline_init(void)
{
struct proc_dir_entry *pde;
@@ -31,6 +40,9 @@ static int __init proc_cmdline_init(void)
pde = proc_create_single("cmdline_load", 0, NULL, cmdline_load_proc_show);
pde_make_permanent(pde);
pde->size = strnlen(boot_command_line, COMMAND_LINE_SIZE) + 1;
+ pde = proc_create_single("cmdline_image", 0, NULL, cmdline_image_proc_show);
+ pde_make_permanent(pde);
+ pde->size = strnlen(saved_bootconfig_string, COMMAND_LINE_SIZE) + 1;
}
return 0;
}
diff --git a/include/linux/init.h b/include/linux/init.h
index 29e75bbe7984..c075983c5015 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -14,7 +14,7 @@
#define __noinitretpoline
#endif
-/* These macros are used to mark some functions or
+/* These macros are used to mark some functions or
* initialized data (doesn't apply to uninitialized data)
* as `initialization' functions. The kernel can take this
* as hint that the function is used only during the initialization
@@ -22,7 +22,7 @@
*
* Usage:
* For functions:
- *
+ *
* You should add __init immediately before the function name, like:
*
* static void __init initme(int x, int y)
@@ -148,6 +148,7 @@ extern char boot_command_line[];
extern char *saved_command_line;
extern unsigned int saved_command_line_len;
extern unsigned int reset_devices;
+extern char saved_bootconfig_string[];
/* used by init/main.c */
void setup_arch(char **);
@@ -184,7 +185,7 @@ extern void (*late_time_init)(void);
extern bool initcall_debug;
#endif
-
+
#ifndef MODULE
#ifndef __ASSEMBLY__
@@ -192,8 +193,8 @@ extern bool initcall_debug;
/*
* initcalls are now grouped by functionality into separate
* subsections. Ordering inside the subsections is determined
- * by link order.
- * For backwards compatibility, initcall() puts the call in
+ * by link order.
+ * For backwards compatibility, initcall() puts the call in
* the device init subsection.
*
* The `id' arg to __define_initcall() is needed so that multiple initcalls
diff --git a/init/main.c b/init/main.c
index 2121685c479a..981170da0b1c 100644
--- a/init/main.c
+++ b/init/main.c
@@ -146,6 +146,11 @@ static char *extra_command_line;
/* Extra init arguments */
static char *extra_init_args;
+/* Untouched boot-config string */
+#ifdef CONFIG_BOOT_CONFIG_FORCE
+char saved_bootconfig_string[COMMAND_LINE_SIZE] __ro_after_init;
+#endif
+
#ifdef CONFIG_BOOT_CONFIG
/* Is bootconfig on command line? */
static bool bootconfig_found;
@@ -435,6 +440,10 @@ static void __init setup_boot_config(void)
return;
}
+#ifdef CONFIG_BOOT_CONFIG_FORCE
+ strncpy(saved_bootconfig_string, data, COMMAND_LINE_SIZE);
+#endif
+
if (size >= XBC_DATA_MAX) {
pr_err("bootconfig size %ld greater than max size %d\n",
(long)size, XBC_DATA_MAX);
--
2.40.1
next prev parent reply other threads:[~2023-07-28 3:37 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-28 3:35 [PATCH RFC bootconfig 0/2] Distinguish bootloader and embedded kernel parameters Paul E. McKenney
2023-07-28 3:37 ` [PATCH RFC bootconfig] 1/2] fs/proc: Add /proc/cmdline_load for boot loader arguments Paul E. McKenney
2023-07-28 4:06 ` Stephen Rothwell
2023-07-28 20:52 ` Paul E. McKenney
2023-07-29 14:29 ` Masami Hiramatsu
2023-07-29 16:16 ` Paul E. McKenney
2023-07-30 1:58 ` Masami Hiramatsu
2023-07-30 18:17 ` Paul E. McKenney
2023-08-04 17:23 ` Alexey Dobriyan
2023-08-04 17:36 ` Paul E. McKenney
2023-08-04 18:43 ` Paul E. McKenney
2023-08-07 2:44 ` Masami Hiramatsu
2023-08-07 4:39 ` Paul E. McKenney
2023-08-12 23:30 ` Paul E. McKenney
2023-08-14 23:08 ` Paul E. McKenney
2023-08-16 9:40 ` Masami Hiramatsu
2023-08-16 15:17 ` Masami Hiramatsu
2023-08-16 16:13 ` Paul E. McKenney
2023-08-20 14:14 ` Masami Hiramatsu
2023-08-20 15:40 ` Paul E. McKenney
2023-07-28 3:37 ` Paul E. McKenney [this message]
2023-07-29 14:23 ` [PATCH RFC bootconfig] 2/2] fs/proc: Add /proc/cmdline_image for embedded arguments Masami Hiramatsu
2023-07-29 15:41 ` Paul E. McKenney
2023-07-30 1:55 ` Masami Hiramatsu
2023-08-04 17:28 ` Alexey Dobriyan
2023-08-04 17:33 ` Paul E. McKenney
2023-07-28 4:25 ` [PATCH RFC bootconfig 0/2] Distinguish bootloader and embedded kernel parameters Randy Dunlap
2023-07-28 21:05 ` Paul E. McKenney
2023-07-31 23:30 ` [PATCH RFC v2 bootconfig 0/3] " Paul E. McKenney
2023-07-31 23:31 ` [PATCH RFC v2 bootconfig 1/3] doc: Update /proc/cmdline documentation to include boot config Paul E. McKenney
2023-08-01 1:02 ` Masami Hiramatsu
2023-08-01 2:00 ` Randy Dunlap
2023-08-01 4:00 ` Paul E. McKenney
2023-07-31 23:31 ` [PATCH RFC v2 bootconfig 2/3] fs/proc: Add /proc/cmdline_load for boot loader arguments Paul E. McKenney
2023-07-31 23:31 ` [PATCH RFC v2 bootconfig 3/3] doc: Add /proc/bootconfig to proc.rst Paul E. McKenney
2023-08-01 1:04 ` Masami Hiramatsu
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=20230728033701.817094-2-paulmck@kernel.org \
--to=paulmck@kernel.org \
--cc=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@kernel.org \
--cc=kernel-team@meta.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mhiramat@kernel.org \
--cc=ndesaulniers@google.com \
--cc=sfr@canb.auug.org.au \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox