summaryrefslogtreecommitdiff
path: root/tools/default_image.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/default_image.c')
-rw-r--r--tools/default_image.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/tools/default_image.c b/tools/default_image.c
index 0ac3382003d..dc429ce9e46 100644
--- a/tools/default_image.c
+++ b/tools/default_image.c
@@ -50,6 +50,12 @@ static int image_verify_header(unsigned char *ptr, int image_size,
struct legacy_img_hdr header;
struct legacy_img_hdr *hdr = &header;
+ if (image_size < sizeof(struct legacy_img_hdr)) {
+ debug("%s: Bad image size: \"%s\" is no valid image\n",
+ params->cmdname, params->imagefile);
+ return -FDT_ERR_BADSTRUCTURE;
+ }
+
/*
* create copy of header so that we can blank out the
* checksum field for checking - this can't be done
@@ -76,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) {