Message ID | 20210708173032.27999-8-marek.behun@nic.cz |
---|---|
State | Superseded |
Delegated to: | Stefan Roese |
Headers | show |
Series | kwboot / kwbimage improvements | expand |
On 08.07.21 19:30, Marek Behún wrote: > From: Pali Rohár <pali@kernel.org> > > 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> Thanks, Stefan > --- > tools/kwbimage.c | 18 +++++++++++------- > 1 file changed, 11 insertions(+), 7 deletions(-) > > diff --git a/tools/kwbimage.c b/tools/kwbimage.c > index c08fb678d4..5192edb330 100644 > --- a/tools/kwbimage.c > +++ b/tools/kwbimage.c > @@ -1653,15 +1653,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; > Viele Grüße, Stefan
diff --git a/tools/kwbimage.c b/tools/kwbimage.c index c08fb678d4..5192edb330 100644 --- a/tools/kwbimage.c +++ b/tools/kwbimage.c @@ -1653,15 +1653,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;