From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
To: Breno Leitao <leitao@debian.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Nathan Chancellor <nathan@kernel.org>,
paulmck@kernel.org, Nicolas Schier <nsc@kernel.org>,
Nick Desaulniers <nick.desaulniers+lkml@gmail.com>,
Bill Wendling <morbo@google.com>,
Justin Stitt <justinstitt@google.com>,
Jonathan Corbet <corbet@lwn.net>,
Shuah Khan <skhan@linuxfoundation.org>,
Thomas Gleixner <tglx@kernel.org>, Ingo Molnar <mingo@redhat.com>,
Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
linux-kbuild@vger.kernel.org, bpf@vger.kernel.org,
llvm@lists.linux.dev, linux-doc@vger.kernel.org,
kernel-team@meta.com, Nicolas Schier <n.schier@fritz.com>
Subject: Re: [PATCH v7 0/9] bootconfig: embed kernel.* cmdline at build time
Date: Fri, 26 Jun 2026 23:33:27 +0900 [thread overview]
Message-ID: <20260626233327.b5c9c8de494acdde4ddf5c02@kernel.org> (raw)
In-Reply-To: <20260626-bootconfig_using_tools-v7-0-24ab72139c29@debian.org>
On Fri, 26 Jun 2026 05:50:09 -0700
Breno Leitao <leitao@debian.org> wrote:
> The userspace pieces (xbc_snprint_cmdline() in lib/, tools/bootconfig -C)
> already landed; this series wires the rendered cmdline into the kernel.
>
> Motivation: today the embedded bootconfig is parsed at runtime, after
> parse_early_param() has already run, so early_param() handlers can't
> see embedded values. Folding the kernel.* subtree into the cmdline at
> build time gives a CONFIG_CMDLINE-equivalent for embedded-bootconfig
> users without forcing them to maintain two cmdline sources.
>
> Behaviorally, the "kernel" subtree is rendered to a flat string at
> build time and stashed in .init.rodata. setup_arch() prepends it to
> boot_command_line before parse_early_param() runs. Overflow is a soft
> error: the helper logs and leaves boot_command_line untouched rather
> than panicking, so an oversized embedded bconf cannot brick a boot.
>
Thanks for update!! This looks good to me.
Let me pick it and test it.
Thanks,
> Signed-off-by: Breno Leitao <leitao@debian.org>
> ---
> Changes in v7:
> - The runtime opt-in now shares one helper instead of open-coding its
> own. (Masami)
> - bootconfig_cmdline_requested() moved into generic lib code (Masami)
> - Link to v6: https://lore.kernel.org/r/20260623-bootconfig_using_tools-v6-0-640c2f587a3c@debian.org
>
> Changes in v6:
> - renamed CONFIG_BOOT_CONFIG_EMBED_CMDLINE to
> CONFIG_CMDLINE_FROM_BOOTCONFIG
> - prepend embedded bootconfig cmdline before parse_early_param
> - Link to v5: https://lore.kernel.org/r/20260617-bootconfig_using_tools-v5-0-fd589a9cc5e3@debian.org
>
> Changes in v5:
> - Patch 3 (Kconfig): drop the redundant "depends on BOOT_CONFIG_EMBED"
> from CMDLINE_FROM_BOOTCONFIG; Julian Braha.
> - Patch 6 (Documentation): spell out how the embedded cmdline interacts
> with the bootloader cmdline, an initrd bootconfig, and the embedded
> bootconfig
> - Link to v4: https://lore.kernel.org/r/20260609-bootconfig_using_tools-v4-0-73c463f03a97@debian.org
>
> Changes in v4:
> - Patch 3 (build pipeline): clear CROSS_COMPILE= in the kernel-side
> tools/bootconfig sub-make. Without it, an LLVM=1 cross build
> inherits CROSS_COMPILE and tools/scripts/Makefile.include injects
> --target=/--sysroot= into the host clang, producing a target
> binary that fails to exec.
> - Patch 3 (build pipeline): place embedded-cmdline.S in its own
> .init.rodata.embed_cmdline subsection ("a") so ld.lld does not
> see a section-type mismatch against lib/bootconfig-data.S's
> writable .init.rodata ("aw"). The linker's *(.init.rodata
> .init.rodata.*) glob still folds it into the init image.
> - Patch 6 (x86/setup): also accept the bootconfig=<anything> form
> via cmdline_find_option(), matching the runtime parse_args() loop.
> Without it, bootconfig=0/=off would skip the early prepend but
> still trigger the late runtime apply -- a split-brain state.
> - New patch 7: document CONFIG_CMDLINE_FROM_BOOTCONFIG in
> Documentation/admin-guide/bootconfig.rst (semantics, opt-in,
> precedence, overflow behavior, example).
> - Link to v3: https://lore.kernel.org/r/20260608-bootconfig_using_tools-v3-0-4ddd079a0696@debian.org
>
> Changes in v3:
> - Patch 3: Move HOSTCC override to the kernel-side rule; tool keeps
> $(CC) for standalone/cross builds.
> - Patch 6: Drop the false fail-safe wording; document the
> BOOT_CONFIG_FORCE=y default interaction.
> - Link to v2:
> https://lore.kernel.org/r/20260605-bootconfig_using_tools-v2-0-d309f544b5f7@debian.org
>
> Changes in v2 (addressing review of v1):
> - Split out a standalone fix for the NULL-pointer arithmetic in
> xbc_snprint_cmdline() so the build-time render cannot trip host
> UBSan/FORTIFY_SOURCE.
> - Rework the leaf-root handling: instead of returning early, skip @root
> inside the loop so a root carrying both a value and subkeys
> (kernel = x together with kernel.foo = bar) still renders its
> descendant keys.
> - Build tools/bootconfig with $(HOSTCC) so cross-compiled (ARCH=...)
> builds render the cmdline on the build host instead of failing with
> "Exec format error".
> - Mark the embedded cmdline section read-only (drop the "w" flag from
> .init.rodata).
> - Add a make-clean hook so tools/bootconfig artifacts are removed by
> make clean.
> - Gate the x86 prepend on "bootconfig" being present on the command
> line (or CONFIG_BOOT_CONFIG_FORCE), matching the init.* opt-in
> semantics documented in bootconfig.rst and preserving fail-safe
> recovery: dropping "bootconfig" from the bootloader cmdline now also
> disables the embedded kernel.* keys.
> - Link to v1: https://patch.msgid.link/20260527-bootconfig_using_tools-v1-0-b6906a86e7d5@debian.org
>
> ---
> Breno Leitao (9):
> bootconfig: fix NULL-pointer arithmetic in xbc_snprint_cmdline()
> bootconfig: render descendant keys when xbc_snprint_cmdline() root has a value
> bootconfig: render embedded bootconfig as a kernel cmdline at build time
> bootconfig: clean build-time tools/bootconfig from make clean
> bootconfig: add xbc_prepend_embedded_cmdline() helper
> Documentation: bootconfig: document build-time cmdline rendering
> x86/setup: prepend embedded bootconfig cmdline before parse_early_param
> bootconfig: skip runtime kernel.* render once prepended early
> init/main.c: use bootconfig_cmdline_requested() for the runtime opt-in
>
> Documentation/admin-guide/bootconfig.rst | 81 ++++++++++++++++
> MAINTAINERS | 1 +
> Makefile | 27 +++++-
> arch/x86/Kconfig | 1 +
> arch/x86/kernel/setup.c | 14 ++-
> include/linux/bootconfig.h | 14 +++
> init/Kconfig | 36 +++++++
> init/main.c | 52 +++++-----
> lib/Makefile | 16 +++
> lib/bootconfig.c | 162 +++++++++++++++++++++++++++++--
> lib/embedded-cmdline.S | 16 +++
> tools/bootconfig/Makefile | 4 +-
> 12 files changed, 388 insertions(+), 36 deletions(-)
> ---
> base-commit: a87737435cfa134f9cdcc696ba3080759d04cf72
> change-id: 20260508-bootconfig_using_tools-cfa7aa9d6a5a
>
> Best regards,
> --
> Breno Leitao <leitao@debian.org>
>
--
Masami Hiramatsu (Google) <mhiramat@kernel.org>
next prev parent reply other threads:[~2026-06-26 14:33 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-26 12:50 [PATCH v7 0/9] bootconfig: embed kernel.* cmdline at build time Breno Leitao
2026-06-26 12:50 ` [PATCH v7 1/9] bootconfig: fix NULL-pointer arithmetic in xbc_snprint_cmdline() Breno Leitao
2026-06-26 12:50 ` [PATCH v7 2/9] bootconfig: render descendant keys when xbc_snprint_cmdline() root has a value Breno Leitao
2026-06-26 12:50 ` [PATCH v7 3/9] bootconfig: render embedded bootconfig as a kernel cmdline at build time Breno Leitao
2026-06-26 13:04 ` sashiko-bot
2026-06-26 12:50 ` [PATCH v7 4/9] bootconfig: clean build-time tools/bootconfig from make clean Breno Leitao
2026-06-26 12:50 ` [PATCH v7 5/9] bootconfig: add xbc_prepend_embedded_cmdline() helper Breno Leitao
2026-06-26 12:50 ` [PATCH v7 6/9] Documentation: bootconfig: document build-time cmdline rendering Breno Leitao
2026-06-26 12:50 ` [PATCH v7 7/9] x86/setup: prepend embedded bootconfig cmdline before parse_early_param Breno Leitao
2026-06-26 12:50 ` [PATCH v7 8/9] bootconfig: skip runtime kernel.* render once prepended early Breno Leitao
2026-06-26 12:50 ` [PATCH v7 9/9] init/main.c: use bootconfig_cmdline_requested() for the runtime opt-in Breno Leitao
2026-06-26 14:33 ` Masami Hiramatsu [this message]
2026-06-26 14:53 ` [PATCH v7 0/9] bootconfig: embed kernel.* cmdline at build time Breno Leitao
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=20260626233327.b5c9c8de494acdde4ddf5c02@kernel.org \
--to=mhiramat@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=bp@alien8.de \
--cc=bpf@vger.kernel.org \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=justinstitt@google.com \
--cc=kernel-team@meta.com \
--cc=leitao@debian.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=mingo@redhat.com \
--cc=morbo@google.com \
--cc=n.schier@fritz.com \
--cc=nathan@kernel.org \
--cc=nick.desaulniers+lkml@gmail.com \
--cc=nsc@kernel.org \
--cc=paulmck@kernel.org \
--cc=skhan@linuxfoundation.org \
--cc=tglx@kernel.org \
--cc=x86@kernel.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.