On Fri, Jul 11, 2025 at 06:24:55PM +0800, Huacai Chen wrote:
BootLoader may pass a head such as "BOOT_IMAGE=/boot/vmlinuz-x.y.z" to kernel parameters. But this head is not recognized by the kernel so will be passed to user space. However, user space init program also doesn't recognized it.
Then why is it on the kernel command line if it is not recognized?
KEXEC may also pass a head such as "kexec" on some architectures.
That's fine, kexec needs this.
So the the best way is handle it by the kernel itself, which can avoid such boot warnings:
Kernel command line: BOOT_IMAGE=(hd0,1)/vmlinuz-6.x root=/dev/sda3 ro console=tty Unknown kernel command line parameters "BOOT_IMAGE=(hd0,1)/vmlinuz-6.x", will be passed to user space.
Why is this a problem? Don't put stuff that is not needed on the kernel command line :)
Cc: stable@vger.kernel.org Signed-off-by: Huacai Chen chenhuacai@loongson.cn
init/main.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/init/main.c b/init/main.c index 225a58279acd..9e0a7e8913c0 100644 --- a/init/main.c +++ b/init/main.c @@ -545,6 +545,7 @@ static int __init unknown_bootoption(char *param, char *val, const char *unused, void *arg) { size_t len = strlen(param);
- const char *bootloader[] = { "BOOT_IMAGE", "kexec", NULL };
You need to document why these are ok to "swallow" and not warn for.
/* Handle params aliased to sysctls */ if (sysctl_is_alias(param)) @@ -552,6 +553,12 @@ static int __init unknown_bootoption(char *param, char *val, repair_env_string(param, val);
- /* Handle bootloader head */
Handle it how?
confused,
greg k-h