
25 Aug
2021
25 Aug
'21
6:49 p.m.
On Wed, 25 Aug 2021 15:46:30 +0200 Marek Behún marek.behun@nic.cz wrote:
@@ -765,6 +1187,37 @@ kwboot_img_is_secure(void *img) return 0; }
+static void * +kwboot_img_grow_data_left(void *img, size_t *size, size_t grow) +{
- uint32_t hdrsz, datasz, srcaddr;
- struct main_hdr_v1 *hdr = img;
- uint8_t *data;
- srcaddr = le32_to_cpu(hdr->srcaddr);
- hdrsz = kwbheader_size(hdr);
- data = (uint8_t *)img + srcaddr;
- datasz = *size - srcaddr;
- /* only move data if there is not enough space */
- if (hdrsz + grow > srcaddr) {
size_t need = hdrsz + grow - srcaddr;
/* move data by enough bytes */
memmove(data + need, data, datasz);
*size += need;
srcaddr += need;
- }
- srcaddr -= grow;
- hdr->srcaddr = cpu_to_le32(srcaddr);
- hdr->destaddr = cpu_to_le32(le32_to_cpu(hdr->destaddr) - grow);
- hdr->execaddr = cpu_to_le32(le32_to_cpu(hdr->execaddr) - grow);
Sorry, we need to do one more thing here: hdr->blocksize = cpu_to_le32(le32_to_cpu(hdr->blocksize) + grow);
I will fix this in v2, unless Stefan is willing to fix this himself.
Marek