bootconfig: Share the checksum function with tools
authorMasami Hiramatsu <mhiramat@kernel.org>
Wed, 2 Jun 2021 08:19:34 +0000 (17:19 +0900)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Thu, 10 Jun 2021 17:41:26 +0000 (13:41 -0400)
Move the checksum calculation function into the header for sharing it
with tools/bootconfig.

Link: https://lkml.kernel.org/r/162262197470.264090.16325743685807878807.stgit@devnote2
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
include/linux/bootconfig.h
init/main.c
tools/bootconfig/main.c

index e49043a..6bdd94c 100644 (file)
 #define BOOTCONFIG_ALIGN       (1 << BOOTCONFIG_ALIGN_SHIFT)
 #define BOOTCONFIG_ALIGN_MASK  (BOOTCONFIG_ALIGN - 1)
 
+/**
+ * xbc_calc_checksum() - Calculate checksum of bootconfig
+ * @data: Bootconfig data.
+ * @size: The size of the bootconfig data.
+ *
+ * Calculate the checksum value of the bootconfig data.
+ * The checksum will be used with the BOOTCONFIG_MAGIC and the size for
+ * embedding the bootconfig in the initrd image.
+ */
+static inline __init u32 xbc_calc_checksum(void *data, u32 size)
+{
+       unsigned char *p = data;
+       u32 ret = 0;
+
+       while (size--)
+               ret += *p++;
+
+       return ret;
+}
+
 /* XBC tree node */
 struct xbc_node {
        u16 next;
index e9c42a1..7b150f0 100644 (file)
@@ -386,16 +386,6 @@ static char * __init xbc_make_cmdline(const char *key)
        return new_cmdline;
 }
 
-static u32 boot_config_checksum(unsigned char *p, u32 size)
-{
-       u32 ret = 0;
-
-       while (size--)
-               ret += *p++;
-
-       return ret;
-}
-
 static int __init bootconfig_params(char *param, char *val,
                                    const char *unused, void *arg)
 {
@@ -439,7 +429,7 @@ static void __init setup_boot_config(void)
                return;
        }
 
-       if (boot_config_checksum((unsigned char *)data, size) != csum) {
+       if (xbc_calc_checksum(data, size) != csum) {
                pr_err("bootconfig checksum failed\n");
                return;
        }
index 62a3b50..f45fa99 100644 (file)
@@ -126,17 +126,6 @@ static void xbc_show_list(void)
        }
 }
 
-/* Simple real checksum */
-static int checksum(unsigned char *buf, int len)
-{
-       int i, sum = 0;
-
-       for (i = 0; i < len; i++)
-               sum += buf[i];
-
-       return sum;
-}
-
 #define PAGE_SIZE      4096
 
 static int load_xbc_fd(int fd, char **buf, int size)
@@ -232,7 +221,7 @@ static int load_xbc_from_initrd(int fd, char **buf)
                return ret;
 
        /* Wrong Checksum */
-       rcsum = checksum((unsigned char *)*buf, size);
+       rcsum = xbc_calc_checksum(*buf, size);
        if (csum != rcsum) {
                pr_err("checksum error: %d != %d\n", csum, rcsum);
                return -EINVAL;
@@ -381,7 +370,7 @@ static int apply_xbc(const char *path, const char *xbc_path)
                return ret;
        }
        size = strlen(buf) + 1;
-       csum = checksum((unsigned char *)buf, size);
+       csum = xbc_calc_checksum(buf, size);
 
        /* Backup the bootconfig data */
        data = calloc(size + BOOTCONFIG_ALIGN +