From: Pali Rohár Date: Fri, 23 Jul 2021 09:14:01 +0000 (+0200) Subject: tools: kwbimage: Fix check for v0 extended header checksum X-Git-Url: http://git.dujemihanovic.xyz/?a=commitdiff_plain;h=fe2c0e259b88b3cfae8adfad543effa837f3a9bc;p=u-boot.git tools: kwbimage: Fix check for v0 extended header checksum Extended header checksum for v0 image is present only in the case when extended header is present. Skip checksum validation if extended header is not present. Signed-off-by: Pali Rohár Reviewed-by: Marek Behún Reviewed-by: Stefan Roese Reviewed-by: Chris Packham Tested-by: Chris Packham --- diff --git a/tools/kwbimage.c b/tools/kwbimage.c index 724459fb8e..4d9d818538 100644 --- a/tools/kwbimage.c +++ b/tools/kwbimage.c @@ -1655,15 +1655,19 @@ static int kwbimage_verify_header(unsigned char *ptr, int image_size, /* Only version 0 extended header has checksum */ if (image_version((void *)ptr) == 0) { - struct ext_hdr_v0 *ext_hdr; + struct main_hdr_v0 *mhdr = (struct main_hdr_v0 *)ptr; - ext_hdr = (struct ext_hdr_v0 *) + if (mhdr->ext & 0x1) { + struct ext_hdr_v0 *ext_hdr; + + ext_hdr = (struct ext_hdr_v0 *) (ptr + sizeof(struct main_hdr_v0)); - checksum = image_checksum8(ext_hdr, - sizeof(struct ext_hdr_v0) - - sizeof(uint8_t)); - if (checksum != ext_hdr->checksum) - return -FDT_ERR_BADSTRUCTURE; + checksum = image_checksum8(ext_hdr, + sizeof(struct ext_hdr_v0) + - sizeof(uint8_t)); + if (checksum != ext_hdr->checksum) + return -FDT_ERR_BADSTRUCTURE; + } } return 0;