]> git.baikalelectronics.ru Git - uboot.git/commitdiff
tools: kwboot: Calculate real used space in kwbimage header when calling kwboot_img_g...
authorPali Rohár <pali@kernel.org>
Mon, 25 Oct 2021 13:13:02 +0000 (15:13 +0200)
committerStefan Roese <sr@denx.de>
Wed, 3 Nov 2021 05:45:27 +0000 (06:45 +0100)
Size of the header stored in kwbimage may be larger than real used size in
the kwbimage header. If there is unused space in kwbimage header then use
it for growing it. So update code to calculate used space of kwbimage
header.

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>
tools/kwboot.c

index bb7555369cc064997e44435af270a301d13c3476..5d7cb7a774f2ec3b54118583ed22b0273ce0acc2 100644 (file)
@@ -1318,11 +1318,20 @@ kwboot_img_grow_hdr(void *img, size_t *size, size_t grow)
 {
        uint32_t hdrsz, datasz, srcaddr;
        struct main_hdr_v1 *hdr = img;
+       struct opt_hdr_v1 *ohdr;
        uint8_t *data;
 
        srcaddr = le32_to_cpu(hdr->srcaddr);
 
-       hdrsz = kwbheader_size(img);
+       /* calculate real used space in kwbimage header */
+       if (kwbimage_version(img) == 0) {
+               hdrsz = kwbheader_size(img);
+       } else {
+               hdrsz = sizeof(*hdr);
+               for_each_opt_hdr_v1 (ohdr, hdr)
+                       hdrsz += opt_hdr_v1_size(ohdr);
+       }
+
        data = (uint8_t *)img + srcaddr;
        datasz = *size - srcaddr;
 
@@ -1339,8 +1348,10 @@ kwboot_img_grow_hdr(void *img, size_t *size, size_t grow)
 
        if (kwbimage_version(img) == 1) {
                hdrsz += grow;
-               hdr->headersz_msb = hdrsz >> 16;
-               hdr->headersz_lsb = cpu_to_le16(hdrsz & 0xffff);
+               if (hdrsz > kwbheader_size(img)) {
+                       hdr->headersz_msb = hdrsz >> 16;
+                       hdr->headersz_lsb = cpu_to_le16(hdrsz & 0xffff);
+               }
        }
 }