]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
tools: default_image: Accept images with padding
authorPali Rohár <pali@kernel.org>
Sun, 29 Jan 2023 16:44:11 +0000 (17:44 +0100)
committerTom Rini <trini@konsulko.com>
Mon, 6 Feb 2023 22:10:14 +0000 (17:10 -0500)
If image file is stored on flash partition then it contains padding, which
is not part of the image itself. Image data size is stored in the image
header. So use image size from the header instead of expecting that total
image file size is size of the header plus size of the image data. This
allows dumpimage to parse image files with padding (e.g. dumped from flash
partition).

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
tools/default_image.c

index ec723f97b71cf44a36aa73ea59c8c27116b1a399..dc429ce9e462920f8e6c1d6f1758ebf88500a98b 100644 (file)
@@ -82,7 +82,17 @@ static int image_verify_header(unsigned char *ptr, int image_size,
        }
 
        data = (const unsigned char *)ptr + sizeof(struct legacy_img_hdr);
-       len  = image_size - sizeof(struct legacy_img_hdr);
+       len = image_get_data_size(hdr);
+
+       if (image_get_type(hdr) == IH_TYPE_FIRMWARE_IVT)
+               /* Add size of CSF minus IVT */
+               len -= 0x2060 - sizeof(flash_header_v2_t);
+
+       if (image_size - sizeof(struct legacy_img_hdr) < len) {
+               debug("%s: Bad image size: \"%s\" is no valid image\n",
+                     params->cmdname, params->imagefile);
+               return -FDT_ERR_BADSTRUCTURE;
+       }
 
        checksum = be32_to_cpu(hdr->ih_dcrc);
        if (crc32(0, data, len) != checksum) {