aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorPali Rohár <pali@kernel.org>2021-11-08 18:12:50 +0100
committerStefan Roese <sr@denx.de>2021-11-10 12:08:06 +0100
commit851114be1a63d1004fc59e4c9e75bf93aed1adb7 (patch)
treecfc7ec05a220c48dd8006f9c14b39e0b09d8c860 /tools
parent2b0980c24027ee00987b04c0c4dc18546a704c84 (diff)
downloadu-boot-851114be1a63d1004fc59e4c9e75bf93aed1adb7.zip
u-boot-851114be1a63d1004fc59e4c9e75bf93aed1adb7.tar.gz
u-boot-851114be1a63d1004fc59e4c9e75bf93aed1adb7.tar.bz2
tools: kwbimage: Properly calculate and align kwbimage v0 header size
Kwbimage v0 has similar alignment requirements as v1. Signed-off-by: Pali Rohár <pali@kernel.org> Signed-off-by: Marek Behún <marek.behun@nic.cz> Reviewed-by: Stefan Roese <sr@denx.de>
Diffstat (limited to 'tools')
-rw-r--r--tools/kwbimage.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 114b313..952023c 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -879,6 +879,20 @@ static size_t image_headersz_align(size_t headersz, uint8_t blockid)
return headersz;
}
+static size_t image_headersz_v0(int *hasext)
+{
+ size_t headersz;
+
+ headersz = sizeof(struct main_hdr_v0);
+ if (image_count_options(IMAGE_CFG_DATA) > 0) {
+ headersz += sizeof(struct ext_hdr_v0);
+ if (hasext)
+ *hasext = 1;
+ }
+
+ return image_headersz_align(headersz, image_get_bootfrom());
+}
+
static void *image_create_v0(size_t *imagesz, struct image_tool_params *params,
int payloadsz)
{
@@ -892,12 +906,7 @@ static void *image_create_v0(size_t *imagesz, struct image_tool_params *params,
* Calculate the size of the header and the size of the
* payload
*/
- headersz = sizeof(struct main_hdr_v0);
-
- if (image_count_options(IMAGE_CFG_DATA) > 0) {
- has_ext = 1;
- headersz += sizeof(struct ext_hdr_v0);
- }
+ headersz = image_headersz_v0(&has_ext);
image = malloc(headersz);
if (!image) {
@@ -1854,8 +1863,7 @@ static int kwbimage_generate(struct image_tool_params *params,
*/
case -1:
case 0:
- alloc_len = sizeof(struct main_hdr_v0) +
- sizeof(struct ext_hdr_v0);
+ alloc_len = image_headersz_v0(NULL);
break;
case 1: