* [PATCH v2 0/3] bootconfig: Support embedding a bootconfig in kernel for non initrd boot
@ 2022-03-14 1:53 Masami Hiramatsu
2022-03-14 1:54 ` [PATCH v2 1/3] bootconfig: Check the checksum before removing the bootconfig from initrd Masami Hiramatsu
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Masami Hiramatsu @ 2022-03-14 1:53 UTC (permalink / raw)
To: Steven Rostedt
Cc: Masami Hiramatsu, Padmanabha Srinivasaiah, LKML, Jonathan Corbet,
linux-doc, Randy Dunlap
Hi,
Here are the 2nd version of the patchset to enable kernel embedded bootconfig
for non-initrd kernel boot environment. You can embed a bootconfig file into
the kernel as a default bootconfig, which will be used if there is no initrd or no
bootconfig is attached to initrd.
This needs 2 options: CONFIG_EMBED_BOOT_CONFIG=y and set the file
path to CONFIG_EMBED_BOOT_CONFIG_FILE. Even if you embed the bootconfig file
to the kernel, it will not be enabled unless you pass "bootconfig" kernel
command line option at boot. Moreover, since this is just a "default"
bootconfig, you can override it with a new bootconfig if you attach another
bootconfig to the initrd (if possible).
CONFIG_EMBED_BOOT_CONFIG_FILE can take both absolute and relative path, but
to simplify and make it independent from the build environment, I recommend
you to use an absolute path for that.
This is requested by Padmanabha at the below thread;
https://lore.kernel.org/all/20220307184011.GA2570@pswork/T/#u
Thank you,
---
Masami Hiramatsu (3):
bootconfig: Check the checksum before removing the bootconfig from initrd
bootconfig: Support embedding a bootconfig file in kernel
docs: bootconfig: Add how to embed the bootconfig into kernel
Documentation/admin-guide/bootconfig.rst | 30 ++++++++++++++++++++++++++---
include/linux/bootconfig.h | 10 ++++++++++
init/Kconfig | 21 ++++++++++++++++++++
init/main.c | 31 +++++++++++++++---------------
lib/.gitignore | 1 +
lib/Makefile | 12 ++++++++++++
lib/bootconfig.c | 23 ++++++++++++++++++++++
7 files changed, 110 insertions(+), 18 deletions(-)
--
Masami Hiramatsu (Linaro) <mhiramat@kernel.org>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/3] bootconfig: Check the checksum before removing the bootconfig from initrd
2022-03-14 1:53 [PATCH v2 0/3] bootconfig: Support embedding a bootconfig in kernel for non initrd boot Masami Hiramatsu
@ 2022-03-14 1:54 ` Masami Hiramatsu
2022-03-14 1:54 ` [PATCH v2 2/3] bootconfig: Support embedding a bootconfig file in kernel Masami Hiramatsu
2022-03-14 1:54 ` [PATCH v2 3/3] docs: bootconfig: Add how to embed the bootconfig into kernel Masami Hiramatsu
2 siblings, 0 replies; 7+ messages in thread
From: Masami Hiramatsu @ 2022-03-14 1:54 UTC (permalink / raw)
To: Steven Rostedt
Cc: Masami Hiramatsu, Padmanabha Srinivasaiah, LKML, Jonathan Corbet,
linux-doc, Randy Dunlap
Check the bootconfig's checksum before removing the bootcinfig data
from initrd to avoid modifying initrd by mistake.
This will also simplifies the get_boot_config_from_initrd() interface.
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
init/main.c | 22 ++++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/init/main.c b/init/main.c
index 65fa2e41a9c0..421050be5039 100644
--- a/init/main.c
+++ b/init/main.c
@@ -265,7 +265,7 @@ static int __init loglevel(char *str)
early_param("loglevel", loglevel);
#ifdef CONFIG_BLK_DEV_INITRD
-static void * __init get_boot_config_from_initrd(u32 *_size, u32 *_csum)
+static void * __init get_boot_config_from_initrd(u32 *_size)
{
u32 size, csum;
char *data;
@@ -299,17 +299,20 @@ static void * __init get_boot_config_from_initrd(u32 *_size, u32 *_csum)
return NULL;
}
+ if (xbc_calc_checksum(data, size) != csum) {
+ pr_err("bootconfig checksum failed\n");
+ return NULL;
+ }
+
/* Remove bootconfig from initramfs/initrd */
initrd_end = (unsigned long)data;
if (_size)
*_size = size;
- if (_csum)
- *_csum = csum;
return data;
}
#else
-static void * __init get_boot_config_from_initrd(u32 *_size, u32 *_csum)
+static void * __init get_boot_config_from_initrd(u32 *_size)
{
return NULL;
}
@@ -408,12 +411,12 @@ static void __init setup_boot_config(void)
static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata;
const char *msg;
int pos;
- u32 size, csum;
+ u32 size;
char *data, *err;
int ret;
/* Cut out the bootconfig data even if we have no bootconfig option */
- data = get_boot_config_from_initrd(&size, &csum);
+ data = get_boot_config_from_initrd(&size);
strlcpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
err = parse_args("bootconfig", tmp_cmdline, NULL, 0, 0, 0, NULL,
@@ -437,11 +440,6 @@ static void __init setup_boot_config(void)
return;
}
- if (xbc_calc_checksum(data, size) != csum) {
- pr_err("bootconfig checksum failed\n");
- return;
- }
-
ret = xbc_init(data, size, &msg, &pos);
if (ret < 0) {
if (pos < 0)
@@ -470,7 +468,7 @@ static void __init exit_boot_config(void)
static void __init setup_boot_config(void)
{
/* Remove bootconfig data from initrd */
- get_boot_config_from_initrd(NULL, NULL);
+ get_boot_config_from_initrd(NULL);
}
static int __init warn_bootconfig(char *str)
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 2/3] bootconfig: Support embedding a bootconfig file in kernel
2022-03-14 1:53 [PATCH v2 0/3] bootconfig: Support embedding a bootconfig in kernel for non initrd boot Masami Hiramatsu
2022-03-14 1:54 ` [PATCH v2 1/3] bootconfig: Check the checksum before removing the bootconfig from initrd Masami Hiramatsu
@ 2022-03-14 1:54 ` Masami Hiramatsu
2022-03-14 1:54 ` [PATCH v2 3/3] docs: bootconfig: Add how to embed the bootconfig into kernel Masami Hiramatsu
2 siblings, 0 replies; 7+ messages in thread
From: Masami Hiramatsu @ 2022-03-14 1:54 UTC (permalink / raw)
To: Steven Rostedt
Cc: Masami Hiramatsu, Padmanabha Srinivasaiah, LKML, Jonathan Corbet,
linux-doc, Randy Dunlap
This allows kernel developer to embed a default bootconfig file in
the kernel instead of embedding it in the initrd. This will be good
for who are using the kernel without initrd, or who needs a default
bootconfigs.
This needs to set two kconfigs: CONFIG_EMBED_BOOT_CONFIG=y and set
the file path to CONFIG_EMBED_BOOT_CONFIG_FILE.
Note that you still need 'bootconfig' command line option to load the
embedded bootconfig. Also if you boot using an initrd with a different
bootconfig, the kernel will use the bootconfig in the initrd, instead
of the default bootconfig.
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
include/linux/bootconfig.h | 10 ++++++++++
init/Kconfig | 21 +++++++++++++++++++++
init/main.c | 13 ++++++++-----
lib/.gitignore | 1 +
lib/Makefile | 12 ++++++++++++
lib/bootconfig.c | 23 +++++++++++++++++++++++
6 files changed, 75 insertions(+), 5 deletions(-)
diff --git a/include/linux/bootconfig.h b/include/linux/bootconfig.h
index a4665c7ab07c..5dbda5e3e9bb 100644
--- a/include/linux/bootconfig.h
+++ b/include/linux/bootconfig.h
@@ -289,4 +289,14 @@ int __init xbc_get_info(int *node_size, size_t *data_size);
/* XBC cleanup data structures */
void __init xbc_exit(void);
+/* XBC embedded bootconfig data in kernel */
+#ifdef CONFIG_EMBED_BOOT_CONFIG
+char * __init xbc_get_embedded_bootconfig(size_t *size);
+#else
+static inline char *xbc_get_embedded_bootconfig(size_t *size)
+{
+ return NULL;
+}
+#endif
+
#endif
diff --git a/init/Kconfig b/init/Kconfig
index e9119bf54b1f..70440804874d 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1357,6 +1357,27 @@ config BOOT_CONFIG
If unsure, say Y.
+config EMBED_BOOT_CONFIG
+ bool "Embed bootconfig file in the kernel"
+ depends on BOOT_CONFIG
+ default n
+ help
+ Embed a bootconfig file given by EMBED_BOOT_CONFIG_FILE in the
+ kernel. Usually, the bootconfig file is loaded with the initrd
+ image. But if the system doesn't support initrd, this option will
+ help you by embedding a bootconfig file while building the kernel.
+
+ If unsure, say N.
+
+config EMBED_BOOT_CONFIG_FILE
+ string "Embedded bootconfig file path"
+ default ""
+ depends on EMBED_BOOT_CONFIG
+ help
+ Specify a bootconfig file which will be embedded to the kernel.
+ This bootconfig will be used if there is no initrd or no other
+ bootconfig in the initrd.
+
choice
prompt "Compiler optimization level"
default CC_OPTIMIZE_FOR_PERFORMANCE
diff --git a/init/main.c b/init/main.c
index 421050be5039..3803bf2e22ea 100644
--- a/init/main.c
+++ b/init/main.c
@@ -265,7 +265,7 @@ static int __init loglevel(char *str)
early_param("loglevel", loglevel);
#ifdef CONFIG_BLK_DEV_INITRD
-static void * __init get_boot_config_from_initrd(u32 *_size)
+static void * __init get_boot_config_from_initrd(size_t *_size)
{
u32 size, csum;
char *data;
@@ -411,12 +411,15 @@ static void __init setup_boot_config(void)
static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata;
const char *msg;
int pos;
- u32 size;
+ size_t size;
char *data, *err;
int ret;
/* Cut out the bootconfig data even if we have no bootconfig option */
data = get_boot_config_from_initrd(&size);
+ /* If there is no bootconfig in initrd, try embedded one. */
+ if (!data)
+ data = xbc_get_embedded_bootconfig(&size);
strlcpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
err = parse_args("bootconfig", tmp_cmdline, NULL, 0, 0, 0, NULL,
@@ -435,8 +438,8 @@ static void __init setup_boot_config(void)
}
if (size >= XBC_DATA_MAX) {
- pr_err("bootconfig size %d greater than max size %d\n",
- size, XBC_DATA_MAX);
+ pr_err("bootconfig size %ld greater than max size %d\n",
+ (long)size, XBC_DATA_MAX);
return;
}
@@ -449,7 +452,7 @@ static void __init setup_boot_config(void)
msg, pos);
} else {
xbc_get_info(&ret, NULL);
- pr_info("Load bootconfig: %d bytes %d nodes\n", size, ret);
+ pr_info("Load bootconfig: %ld bytes %d nodes\n", (long)size, ret);
/* keys starting with "kernel." are passed via cmdline */
extra_command_line = xbc_make_cmdline("kernel");
/* Also, "init." keys are init arguments */
diff --git a/lib/.gitignore b/lib/.gitignore
index e5e217b8307b..30a2a5db7033 100644
--- a/lib/.gitignore
+++ b/lib/.gitignore
@@ -6,3 +6,4 @@
/oid_registry_data.c
/test_fortify.log
/test_fortify/*.log
+/default.bconf
diff --git a/lib/Makefile b/lib/Makefile
index 300f569c626b..8183785ee99d 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -279,6 +279,18 @@ $(foreach file, $(libfdt_files), \
$(eval CFLAGS_$(file) = -I $(srctree)/scripts/dtc/libfdt))
lib-$(CONFIG_LIBFDT) += $(libfdt_files)
+ifeq ($(CONFIG_EMBED_BOOT_CONFIG),y)
+# Since the specified bootconfig file can be switched, we forcibly update the
+# default.bconf file always.
+$(obj)/default.bconf: FORCE
+ $(call cmd,defbconf)
+
+quiet_cmd_defbconf = GEN $@
+ cmd_defbconf = cat < /dev/null $(CONFIG_EMBED_BOOT_CONFIG_FILE) > $@
+clean-files += default.bconf
+$(obj)/bootconfig.o: $(obj)/default.bconf
+endif
+
lib-$(CONFIG_BOOT_CONFIG) += bootconfig.o
obj-$(CONFIG_RBTREE_TEST) += rbtree_test.o
diff --git a/lib/bootconfig.c b/lib/bootconfig.c
index 74f3201ab8e5..3a3bf3a208e3 100644
--- a/lib/bootconfig.c
+++ b/lib/bootconfig.c
@@ -12,6 +12,29 @@
#include <linux/kernel.h>
#include <linux/memblock.h>
#include <linux/string.h>
+
+#ifdef CONFIG_EMBED_BOOT_CONFIG
+asm (
+" .pushsection .init.data, \"aw\" \n"
+" .global embedded_bootconfig_data \n"
+"embedded_bootconfig_data: \n"
+" .incbin \"lib/default.bconf\" \n"
+" .global embedded_bootconfig_data_end \n"
+"embedded_bootconfig_data_end: \n"
+" .popsection \n"
+);
+
+extern __visible char embedded_bootconfig_data[];
+extern __visible char embedded_bootconfig_data_end[];
+
+char * __init xbc_get_embedded_bootconfig(size_t *size)
+{
+ *size = embedded_bootconfig_data_end - embedded_bootconfig_data;
+ return (*size) ? embedded_bootconfig_data : NULL;
+}
+
+#endif
+
#else /* !__KERNEL__ */
/*
* NOTE: This is only for tools/bootconfig, because tools/bootconfig will
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 3/3] docs: bootconfig: Add how to embed the bootconfig into kernel
2022-03-14 1:53 [PATCH v2 0/3] bootconfig: Support embedding a bootconfig in kernel for non initrd boot Masami Hiramatsu
2022-03-14 1:54 ` [PATCH v2 1/3] bootconfig: Check the checksum before removing the bootconfig from initrd Masami Hiramatsu
2022-03-14 1:54 ` [PATCH v2 2/3] bootconfig: Support embedding a bootconfig file in kernel Masami Hiramatsu
@ 2022-03-14 1:54 ` Masami Hiramatsu
2022-03-14 2:03 ` Randy Dunlap
2 siblings, 1 reply; 7+ messages in thread
From: Masami Hiramatsu @ 2022-03-14 1:54 UTC (permalink / raw)
To: Steven Rostedt
Cc: Masami Hiramatsu, Padmanabha Srinivasaiah, LKML, Jonathan Corbet,
linux-doc, Randy Dunlap
Add a description how to embed the bootconfig file into kernel.
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
Changes in v2:
- Corrected the text accoding to Randy's suggestion.
- Do not reccomend to use relative path for CONFIG_EMBED_BOOT_CONFIG_FILE.
---
Documentation/admin-guide/bootconfig.rst | 30 +++++++++++++++++++++++++++---
1 file changed, 27 insertions(+), 3 deletions(-)
diff --git a/Documentation/admin-guide/bootconfig.rst b/Documentation/admin-guide/bootconfig.rst
index a1860fc0ca88..1af1a172fdd4 100644
--- a/Documentation/admin-guide/bootconfig.rst
+++ b/Documentation/admin-guide/bootconfig.rst
@@ -158,9 +158,15 @@ Each key-value pair is shown in each line with following style::
Boot Kernel With a Boot Config
==============================
-Since the boot configuration file is loaded with initrd, it will be added
-to the end of the initrd (initramfs) image file with padding, size,
-checksum and 12-byte magic word as below.
+There are two options to boot the kernel with bootconfig: attaching the
+bootconfig to the initrd image or embedding it in the kernel itself.
+
+Attaching a Boot Config to Initrd
+---------------------------------
+
+Since the boot configuration file is loaded with initrd by default,
+it will be added to the end of the initrd (initramfs) image file with
+padding, size, checksum and 12-byte magic word as below.
[initrd][bootconfig][padding][size(le32)][checksum(le32)][#BOOTCONFIG\n]
@@ -196,6 +202,24 @@ To remove the config from the image, you can use -d option as below::
Then add "bootconfig" on the normal kernel command line to tell the
kernel to look for the bootconfig at the end of the initrd file.
+Embedding a Boot Config into Kernel
+-----------------------------------
+
+If you can not use initrd, you can also embed the bootconfig file in the
+kernel by Kconfig options. In this case, you need to recompile the kernel
+with the following configs::
+
+ COFNIG_EMBED_BOOT_CONFIG=y
+ CONFIG_EMBED_BOOT_CONFIG_FILE="/PATH/TO/BOOTCONFIG/FILE"
+
+``CONFIG_EMBED_BOOT_CONFIG_FILE`` requires a correct absolute path to
+the bootconfig file. The kernel will embed it as the default bootconfig.
+
+Just as when attaching the bootconfig to the initrd, you need ``bootconfig``
+option to the kernel command line to enable the embedded bootconfig.
+
+Note that even if you set this option, you can override the embedded
+bootconfig by another bootconfig which attached to the initrd.
Kernel parameters via Boot Config
=================================
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 3/3] docs: bootconfig: Add how to embed the bootconfig into kernel
2022-03-14 1:54 ` [PATCH v2 3/3] docs: bootconfig: Add how to embed the bootconfig into kernel Masami Hiramatsu
@ 2022-03-14 2:03 ` Randy Dunlap
2022-03-14 8:03 ` Masami Hiramatsu
0 siblings, 1 reply; 7+ messages in thread
From: Randy Dunlap @ 2022-03-14 2:03 UTC (permalink / raw)
To: Masami Hiramatsu, Steven Rostedt
Cc: Padmanabha Srinivasaiah, LKML, Jonathan Corbet, linux-doc
On 3/13/22 18:54, Masami Hiramatsu wrote:
> Add a description how to embed the bootconfig file into kernel.
>
> Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
> ---
> Changes in v2:
> - Corrected the text accoding to Randy's suggestion.
> - Do not reccomend to use relative path for CONFIG_EMBED_BOOT_CONFIG_FILE.
> ---
> Documentation/admin-guide/bootconfig.rst | 30 +++++++++++++++++++++++++++---
> 1 file changed, 27 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/admin-guide/bootconfig.rst b/Documentation/admin-guide/bootconfig.rst
> index a1860fc0ca88..1af1a172fdd4 100644
> --- a/Documentation/admin-guide/bootconfig.rst
> +++ b/Documentation/admin-guide/bootconfig.rst
> @@ -158,9 +158,15 @@ Each key-value pair is shown in each line with following style::
> Boot Kernel With a Boot Config
> ==============================
>
> -Since the boot configuration file is loaded with initrd, it will be added
> -to the end of the initrd (initramfs) image file with padding, size,
> -checksum and 12-byte magic word as below.
> +There are two options to boot the kernel with bootconfig: attaching the
> +bootconfig to the initrd image or embedding it in the kernel itself.
> +
> +Attaching a Boot Config to Initrd
> +---------------------------------
> +
> +Since the boot configuration file is loaded with initrd by default,
> +it will be added to the end of the initrd (initramfs) image file with
> +padding, size, checksum and 12-byte magic word as below.
>
> [initrd][bootconfig][padding][size(le32)][checksum(le32)][#BOOTCONFIG\n]
>
> @@ -196,6 +202,24 @@ To remove the config from the image, you can use -d option as below::
> Then add "bootconfig" on the normal kernel command line to tell the
> kernel to look for the bootconfig at the end of the initrd file.
>
> +Embedding a Boot Config into Kernel
> +-----------------------------------
> +
> +If you can not use initrd, you can also embed the bootconfig file in the
> +kernel by Kconfig options. In this case, you need to recompile the kernel
> +with the following configs::
> +
> + COFNIG_EMBED_BOOT_CONFIG=y
CONFIG_
> + CONFIG_EMBED_BOOT_CONFIG_FILE="/PATH/TO/BOOTCONFIG/FILE"
> +
> +``CONFIG_EMBED_BOOT_CONFIG_FILE`` requires a correct absolute path to
> +the bootconfig file. The kernel will embed it as the default bootconfig.
> +
> +Just as when attaching the bootconfig to the initrd, you need ``bootconfig``
> +option to the kernel command line to enable the embedded bootconfig.
on the
preferably.
> +
> +Note that even if you set this option, you can override the embedded
> +bootconfig by another bootconfig which attached to the initrd.
>
> Kernel parameters via Boot Config
> =================================
>
thanks.
--
~Randy
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 3/3] docs: bootconfig: Add how to embed the bootconfig into kernel
2022-03-14 2:03 ` Randy Dunlap
@ 2022-03-14 8:03 ` Masami Hiramatsu
0 siblings, 0 replies; 7+ messages in thread
From: Masami Hiramatsu @ 2022-03-14 8:03 UTC (permalink / raw)
To: Randy Dunlap
Cc: Steven Rostedt, Padmanabha Srinivasaiah, LKML, Jonathan Corbet,
linux-doc
On Sun, 13 Mar 2022 19:03:20 -0700
Randy Dunlap <rdunlap@infradead.org> wrote:
>
>
> On 3/13/22 18:54, Masami Hiramatsu wrote:
> > Add a description how to embed the bootconfig file into kernel.
> >
> > Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
> > ---
> > Changes in v2:
> > - Corrected the text accoding to Randy's suggestion.
> > - Do not reccomend to use relative path for CONFIG_EMBED_BOOT_CONFIG_FILE.
> > ---
> > Documentation/admin-guide/bootconfig.rst | 30 +++++++++++++++++++++++++++---
> > 1 file changed, 27 insertions(+), 3 deletions(-)
> >
> > diff --git a/Documentation/admin-guide/bootconfig.rst b/Documentation/admin-guide/bootconfig.rst
> > index a1860fc0ca88..1af1a172fdd4 100644
> > --- a/Documentation/admin-guide/bootconfig.rst
> > +++ b/Documentation/admin-guide/bootconfig.rst
> > @@ -158,9 +158,15 @@ Each key-value pair is shown in each line with following style::
> > Boot Kernel With a Boot Config
> > ==============================
> >
> > -Since the boot configuration file is loaded with initrd, it will be added
> > -to the end of the initrd (initramfs) image file with padding, size,
> > -checksum and 12-byte magic word as below.
> > +There are two options to boot the kernel with bootconfig: attaching the
> > +bootconfig to the initrd image or embedding it in the kernel itself.
> > +
> > +Attaching a Boot Config to Initrd
> > +---------------------------------
> > +
> > +Since the boot configuration file is loaded with initrd by default,
> > +it will be added to the end of the initrd (initramfs) image file with
> > +padding, size, checksum and 12-byte magic word as below.
> >
> > [initrd][bootconfig][padding][size(le32)][checksum(le32)][#BOOTCONFIG\n]
> >
> > @@ -196,6 +202,24 @@ To remove the config from the image, you can use -d option as below::
> > Then add "bootconfig" on the normal kernel command line to tell the
> > kernel to look for the bootconfig at the end of the initrd file.
> >
> > +Embedding a Boot Config into Kernel
> > +-----------------------------------
> > +
> > +If you can not use initrd, you can also embed the bootconfig file in the
> > +kernel by Kconfig options. In this case, you need to recompile the kernel
> > +with the following configs::
> > +
> > + COFNIG_EMBED_BOOT_CONFIG=y
>
> CONFIG_
Oops, it's a typo...
>
> > + CONFIG_EMBED_BOOT_CONFIG_FILE="/PATH/TO/BOOTCONFIG/FILE"
> > +
> > +``CONFIG_EMBED_BOOT_CONFIG_FILE`` requires a correct absolute path to
> > +the bootconfig file. The kernel will embed it as the default bootconfig.
> > +
> > +Just as when attaching the bootconfig to the initrd, you need ``bootconfig``
> > +option to the kernel command line to enable the embedded bootconfig.
>
> on the
OK.
Thank you!
>
> preferably.
>
> > +
> > +Note that even if you set this option, you can override the embedded
> > +bootconfig by another bootconfig which attached to the initrd.
> >
> > Kernel parameters via Boot Config
> > =================================
> >
>
> thanks.
> --
> ~Randy
--
Masami Hiramatsu <mhiramat@kernel.org>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/3] bootconfig: Check the checksum before removing the bootconfig from initrd
2022-03-14 9:08 [PATCH v2 0/3] bootconfig: Support embedding a bootconfig in kernel for non initrd boot Masami Hiramatsu
@ 2022-03-14 9:08 ` Masami Hiramatsu
0 siblings, 0 replies; 7+ messages in thread
From: Masami Hiramatsu @ 2022-03-14 9:08 UTC (permalink / raw)
To: Steven Rostedt
Cc: Masami Hiramatsu, Padmanabha Srinivasaiah, LKML, Jonathan Corbet,
linux-doc, Randy Dunlap
Check the bootconfig's checksum before removing the bootcinfig data
from initrd to avoid modifying initrd by mistake.
This will also simplifies the get_boot_config_from_initrd() interface.
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
init/main.c | 22 ++++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/init/main.c b/init/main.c
index 65fa2e41a9c0..421050be5039 100644
--- a/init/main.c
+++ b/init/main.c
@@ -265,7 +265,7 @@ static int __init loglevel(char *str)
early_param("loglevel", loglevel);
#ifdef CONFIG_BLK_DEV_INITRD
-static void * __init get_boot_config_from_initrd(u32 *_size, u32 *_csum)
+static void * __init get_boot_config_from_initrd(u32 *_size)
{
u32 size, csum;
char *data;
@@ -299,17 +299,20 @@ static void * __init get_boot_config_from_initrd(u32 *_size, u32 *_csum)
return NULL;
}
+ if (xbc_calc_checksum(data, size) != csum) {
+ pr_err("bootconfig checksum failed\n");
+ return NULL;
+ }
+
/* Remove bootconfig from initramfs/initrd */
initrd_end = (unsigned long)data;
if (_size)
*_size = size;
- if (_csum)
- *_csum = csum;
return data;
}
#else
-static void * __init get_boot_config_from_initrd(u32 *_size, u32 *_csum)
+static void * __init get_boot_config_from_initrd(u32 *_size)
{
return NULL;
}
@@ -408,12 +411,12 @@ static void __init setup_boot_config(void)
static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata;
const char *msg;
int pos;
- u32 size, csum;
+ u32 size;
char *data, *err;
int ret;
/* Cut out the bootconfig data even if we have no bootconfig option */
- data = get_boot_config_from_initrd(&size, &csum);
+ data = get_boot_config_from_initrd(&size);
strlcpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
err = parse_args("bootconfig", tmp_cmdline, NULL, 0, 0, 0, NULL,
@@ -437,11 +440,6 @@ static void __init setup_boot_config(void)
return;
}
- if (xbc_calc_checksum(data, size) != csum) {
- pr_err("bootconfig checksum failed\n");
- return;
- }
-
ret = xbc_init(data, size, &msg, &pos);
if (ret < 0) {
if (pos < 0)
@@ -470,7 +468,7 @@ static void __init exit_boot_config(void)
static void __init setup_boot_config(void)
{
/* Remove bootconfig data from initrd */
- get_boot_config_from_initrd(NULL, NULL);
+ get_boot_config_from_initrd(NULL);
}
static int __init warn_bootconfig(char *str)
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-03-14 9:08 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-14 1:53 [PATCH v2 0/3] bootconfig: Support embedding a bootconfig in kernel for non initrd boot Masami Hiramatsu
2022-03-14 1:54 ` [PATCH v2 1/3] bootconfig: Check the checksum before removing the bootconfig from initrd Masami Hiramatsu
2022-03-14 1:54 ` [PATCH v2 2/3] bootconfig: Support embedding a bootconfig file in kernel Masami Hiramatsu
2022-03-14 1:54 ` [PATCH v2 3/3] docs: bootconfig: Add how to embed the bootconfig into kernel Masami Hiramatsu
2022-03-14 2:03 ` Randy Dunlap
2022-03-14 8:03 ` Masami Hiramatsu
2022-03-14 9:08 [PATCH v2 0/3] bootconfig: Support embedding a bootconfig in kernel for non initrd boot Masami Hiramatsu
2022-03-14 9:08 ` [PATCH v2 1/3] bootconfig: Check the checksum before removing the bootconfig from initrd Masami Hiramatsu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).