From 7fc6f0e2dd9933b35d0fbc49a1d6d6ec775cd439 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Pali=20Roh=C3=A1r?= Date: Sun, 29 Jan 2023 17:44:11 +0100 Subject: [PATCH] tools: default_image: Accept images with padding MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Simon Glass --- tools/default_image.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tools/default_image.c b/tools/default_image.c index ec723f97b7..dc429ce9e4 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) { -- 2.39.5