On Fri, 11 Sep 2026 23:12:56 +0900 "Masami Hiramatsu (Google)"
<[email protected]> wrote:
> Hi,
>
> Here are v2 patches for bootconfig to rejects unexpected config data after
> null character and other cleanups including tools/bootconfig to consolidate
> bootconfig initialization with errors, and skipping internal tree sanity
> check in kernel.
>
> ...
>
Thanks, I've updateed mm.git's mm-nonmm-unstable branch to this version,
> This version removes redundant buffer copy in init_xbc_with_error() [2/4]
> and moves BOOTCONFIG_FOOTER_SIZE to include/linux/bootconfig.h[4/4].
Here's how v2 altered mm.git:
include/linux/bootconfig.h | 4 ++++
init/main.c | 2 +-
tools/bootconfig/main.c | 14 +-------------
3 files changed, 6 insertions(+), 14 deletions(-)
--- a/include/linux/bootconfig.h~b
+++ a/include/linux/bootconfig.h
@@ -27,6 +27,10 @@ bool __init cmdline_has_extra_options(vo
#define BOOTCONFIG_ALIGN (1 << BOOTCONFIG_ALIGN_SHIFT)
#define BOOTCONFIG_ALIGN_MASK (BOOTCONFIG_ALIGN - 1)
+/* Bootconfig footer is [size][csum][BOOTCONFIG_MAGIC]. */
+#define BOOTCONFIG_FOOTER_SIZE \
+ (sizeof(uint32_t) * 2 + BOOTCONFIG_MAGIC_LEN)
+
/**
* xbc_calc_checksum() - Calculate checksum of bootconfig
* @data: Bootconfig data.
--- a/init/main.c~b
+++ a/init/main.c
@@ -278,7 +278,7 @@ static void * __init get_boot_config_fro
int i;
if (!initrd_end || initrd_end < initrd_start ||
- initrd_end - initrd_start < BOOTCONFIG_MAGIC_LEN + 8)
+ initrd_end - initrd_start < BOOTCONFIG_FOOTER_SIZE)
return NULL;
data = (char *)initrd_end - BOOTCONFIG_MAGIC_LEN;
--- a/tools/bootconfig/main.c~b
+++ a/tools/bootconfig/main.c
@@ -17,10 +17,6 @@
#define pr_err(fmt, ...) fprintf(stderr, fmt, ##__VA_ARGS__)
-/* Bootconfig footer is [size][csum][BOOTCONFIG_MAGIC]. */
-#define BOOTCONFIG_FOOTER_SIZE \
- (sizeof(uint32_t) * 2 + BOOTCONFIG_MAGIC_LEN)
-
static void show_xbc_error(const char *data, const char *msg, int pos)
{
int lin = 1, col, i;
@@ -44,20 +40,12 @@ static void show_xbc_error(const char *d
static int init_xbc_with_error(char *buf, int len)
{
- char *copy = malloc(len);
const char *msg;
int ret, pos;
- if (!copy)
- return -ENOMEM;
-
- memcpy(copy, buf, len);
- /* We do not terminate the copy with \0 for sanity checking */
-
ret = xbc_init(buf, len, &msg, &pos);
if (ret < 0)
- show_xbc_error(copy, msg, pos);
- free(copy);
+ show_xbc_error(buf, msg, pos);
return ret;
}
_