9
0
Fork 0

scripts: kwboot: fix image check for padded images

When there is some padding between header and payload the claim

	header_size + image_size == file_size

fails. Relax the check accordingly to:

	header_size <= image_offset &&
	image_offset + image_size == file_size

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Uwe Kleine-König 2017-02-11 20:57:51 +01:00 committed by Sascha Hauer
parent 4afb09cc67
commit 67fafb1230
1 changed files with 12 additions and 4 deletions

View File

@ -603,7 +603,7 @@ static int
kwboot_check_image(unsigned char *img, size_t size)
{
size_t i;
size_t header_size, image_size;
size_t header_size, image_size, image_offset;
unsigned char csum = 0;
if (size < 0x20) {
@ -640,12 +640,20 @@ kwboot_check_image(unsigned char *img, size_t size)
image_size = img[0x4] | (img[0x5] << 8) |
(img[0x6] << 16) | (img[0x7] << 24);
image_offset = img[0xc] | (img[0xd] << 8) |
(img[0xe] << 16) | (img[0xf] << 24);
header_size = (img[0x9] << 16) | img[0xa] | (img[0xb] << 8);
if (header_size + image_size != size) {
fprintf(stderr, "Size mismatch (%zu + %zu != %zu)\n",
header_size, image_size, size);
if (header_size > image_offset) {
fprintf(stderr, "Header (%zu) expands over image start (%zu)\n",
header_size, image_offset);
return 1;
}
if (image_offset + image_size != size) {
fprintf(stderr, "Image doesn't end at file end (%zu + %zu != %zu)\n",
image_offset, image_size, size);
return 1;
}