]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
tools: kwboot: Validate optional kwbimage v1 headers
authorPali Rohár <pali@kernel.org>
Sun, 8 Jan 2023 12:42:07 +0000 (13:42 +0100)
committerStefan Roese <sr@denx.de>
Wed, 1 Mar 2023 05:39:17 +0000 (06:39 +0100)
Before starting parsing of kwbimage, first validate that all optional v1
headers and correct. This prevents kwboot crashes on invalid input.

Signed-off-by: Pali Rohár <pali@kernel.org>
tools/kwboot.c

index da840864b56577d08144a4d6913d383444051788..c8c7a8d2465829dd4f5db873320e78fd8c5d347c 100644 (file)
@@ -1939,6 +1939,7 @@ static int
 kwboot_img_patch(void *img, size_t *size, int baudrate)
 {
        struct main_hdr_v1 *hdr;
+       struct opt_hdr_v1 *ohdr;
        uint32_t srcaddr;
        uint8_t csum;
        size_t hdrsz;
@@ -1990,6 +1991,13 @@ kwboot_img_patch(void *img, size_t *size, int baudrate)
            *size < le32_to_cpu(hdr->srcaddr) + le32_to_cpu(hdr->blocksize))
                goto err;
 
+       for_each_opt_hdr_v1 (ohdr, hdr) {
+               if (!opt_hdr_v1_valid_size(ohdr, (const uint8_t *)hdr + hdrsz)) {
+                       fprintf(stderr, "Invalid optional image header\n");
+                       goto err;
+               }
+       }
+
        /*
         * The 32-bit data checksum is optional for UART image. If it is not
         * present (checksum detected as invalid) then grow data part of the