Messages in this thread | | | Date | Tue, 17 Nov 2020 00:51:39 +0900 | From | Masami Hiramatsu <> | Subject | Re: [PATCH 1/2] tools/bootconfig: Align the bootconfig applied initrd image size to 4 |
| |
On Tue, 17 Nov 2020 00:05:53 +0900 Masami Hiramatsu <mhiramat@kernel.org> wrote:
> Align the bootconfig applied initrd image size to 4. To pad the data, > bootconfig will use space (0x20) in front of the bootconfig data, > and expands its size and update checksum. > > Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> > --- > include/linux/bootconfig.h | 1 + > tools/bootconfig/main.c | 33 ++++++++++++++++++++++++++++----- > tools/bootconfig/test-bootconfig.sh | 6 +++++- > 3 files changed, 34 insertions(+), 6 deletions(-) > > diff --git a/include/linux/bootconfig.h b/include/linux/bootconfig.h > index 9903088891fa..461f621047f3 100644 > --- a/include/linux/bootconfig.h > +++ b/include/linux/bootconfig.h > @@ -12,6 +12,7 @@ > > #define BOOTCONFIG_MAGIC "#BOOTCONFIG\n" > #define BOOTCONFIG_MAGIC_LEN 12 > +#define BOOTCONFIG_ALIGN 4 > > /* XBC tree node */ > struct xbc_node { > diff --git a/tools/bootconfig/main.c b/tools/bootconfig/main.c > index eb92027817a7..4b48e6a5ad1b 100644 > --- a/tools/bootconfig/main.c > +++ b/tools/bootconfig/main.c > @@ -332,11 +332,13 @@ static int delete_xbc(const char *path) > > static int apply_xbc(const char *path, const char *xbc_path) > { > + const char padbuf[BOOTCONFIG_ALIGN] = { 0 }; > u32 size, csum; > char *buf, *data; > int ret, fd; > const char *msg; > - int pos; > + struct stat st; > + int pos, pad; > > ret = load_xbc_file(xbc_path, &buf); > if (ret < 0) { > @@ -347,12 +349,10 @@ static int apply_xbc(const char *path, const char *xbc_path) > csum = checksum((unsigned char *)buf, size); > > /* Prepare xbc_path data */ > - data = malloc(size + 8); > + data = malloc(size); > if (!data) > return -ENOMEM; > strcpy(data, buf); > - *(u32 *)(data + size) = size; > - *(u32 *)(data + size + 4) = csum; > > /* Check the data format */ > ret = xbc_init(buf, &msg, &pos); > @@ -387,12 +387,35 @@ static int apply_xbc(const char *path, const char *xbc_path) > free(data); > return fd; > } > + > + /* To algin up the total size to BOOTCONFIG_ALIGN, get padding size */ > + ret = fstat(fd, &st); > + if (ret < 0) { > + pr_err("Failed to get the stat of %s\n", path); > + free(data); > + return ret; > + } > + pad = BOOTCONFIG_ALIGN - (st.st_size + size) % BOOTCONFIG_ALIGN;
Oops, I forgot to add the footer size. This will work for 4 byte alignment, but doesn't work 8 bytes or larger. I'll send v2 soon.
Thank you,
-- Masami Hiramatsu <mhiramat@kernel.org>
| |