aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPali Rohár2023-01-29 17:44:11 +0100
committerTom Rini2023-02-06 17:10:14 -0500
commit598e911f2391d0a9f002bc49d37a06b5ef3213cb (patch)
tree306921a6f3cffdb7836cbd18d8a50e0216a3236b
parent3f837b06b76d06189055a0fcdaee4d31c7758d9e (diff)
tools: default_image: Accept images with padding
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>
-rw-r--r--tools/default_image.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/tools/default_image.c b/tools/default_image.c
index ec723f97b71..dc429ce9e46 100644
--- a/tools/default_image.c
+++ b/tools/default_image.c
@@ -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) {