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 <pali@kernel.org> Reviewed-by: Marek Behún <marek.behun@nic.cz> Reviewed-by: Stefan Roese <sr@denx.de> Reviewed-by: Chris Packham <judge.packham@gmail.com> Tested-by: Chris Packham <judge.packham@gmail.com>
This commit is contained in:
parent
4efbf1c327
commit
fe2c0e259b
1 changed files with 11 additions and 7 deletions
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue