cmd: mvebu/bubt: Check also A8K boot image checksum
authorPali Rohár <pali@kernel.org>
Sun, 29 Jan 2023 17:49:04 +0000 (18:49 +0100)
committerStefan Roese <sr@denx.de>
Wed, 1 Mar 2023 05:39:17 +0000 (06:39 +0100)
Signed-off-by: Pali Rohár <pali@kernel.org>
cmd/mvebu/bubt.c

index 1b08ca9..74ea037 100644 (file)
@@ -725,9 +725,8 @@ static int check_image_header(void)
 {
        struct mvebu_image_header *hdr =
                        (struct mvebu_image_header *)get_load_addr();
-       u32 header_len = hdr->prolog_size;
        u32 checksum;
-       u32 checksum_ref = hdr->prolog_checksum;
+       u32 checksum_ref;
 
        /*
         * For now compare checksum, and magic. Later we can
@@ -739,9 +738,18 @@ static int check_image_header(void)
                return -ENOEXEC;
        }
 
-       checksum = do_checksum32((u32 *)hdr, header_len);
+       checksum_ref = hdr->prolog_checksum;
+       checksum = do_checksum32((u32 *)hdr, hdr->prolog_size);
        checksum -= hdr->prolog_checksum;
        if (checksum != checksum_ref) {
+               printf("Error: Bad Prolog checksum. 0x%x != 0x%x\n",
+                      checksum, checksum_ref);
+               return -ENOEXEC;
+       }
+
+       checksum_ref = hdr->boot_image_checksum;
+       checksum = do_checksum32((u32 *)((u8 *)hdr + hdr->prolog_size), hdr->boot_image_size);
+       if (checksum != checksum_ref) {
                printf("Error: Bad Image checksum. 0x%x != 0x%x\n",
                       checksum, checksum_ref);
                return -ENOEXEC;