summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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) {