public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v1 0/2] This little series fixes some issues with kwbimage.
@ 2015-11-27  8:43 Reinhard Pfau
  2015-11-27  8:43 ` [U-Boot] [PATCH v1 1/2] kwbimage: fix endianess issue Reinhard Pfau
  2015-11-27  8:43 ` [U-Boot] [PATCH v1 2/2] kwbimage: fix size computations for v1 images Reinhard Pfau
  0 siblings, 2 replies; 5+ messages in thread
From: Reinhard Pfau @ 2015-11-27  8:43 UTC (permalink / raw)
  To: u-boot

It makes kwbimage working on BE build hosts and fixes some flaws in computation
of image header sizes.


Reinhard Pfau (2):
  kwbimage: fix endianess issue
  kwbimage: fix size computations for v1 images

 tools/kwbimage.c | 50 ++++++++++++++++++++++++++++----------------------
 tools/kwbimage.h |  3 ++-
 2 files changed, 30 insertions(+), 23 deletions(-)

-- 
1.8.3

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH v1 1/2] kwbimage: fix endianess issue
  2015-11-27  8:43 [U-Boot] [PATCH v1 0/2] This little series fixes some issues with kwbimage Reinhard Pfau
@ 2015-11-27  8:43 ` Reinhard Pfau
  2015-11-27 10:31   ` Stefan Roese
  2015-11-27  8:43 ` [U-Boot] [PATCH v1 2/2] kwbimage: fix size computations for v1 images Reinhard Pfau
  1 sibling, 1 reply; 5+ messages in thread
From: Reinhard Pfau @ 2015-11-27  8:43 UTC (permalink / raw)
  To: u-boot

KWB image header values are in little endian (LE).
So adding appropriate cpu_to_leXX() calls to allow building those images
on BE hosts, too.

Signed-off-by: Reinhard Pfau <reinhard.pfau@gdsys.cc>
Cc: Luka Perkov <luka.perkov@sartura.hr>
---

 tools/kwbimage.c | 43 ++++++++++++++++++++++++-------------------
 tools/kwbimage.h |  3 ++-
 2 files changed, 26 insertions(+), 20 deletions(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index d33f1b6..afba73f 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -232,11 +232,12 @@ static void *image_create_v0(size_t *imagesz, struct image_tool_params *params,
 	main_hdr = image;
 
 	/* Fill in the main header */
-	main_hdr->blocksize = payloadsz + sizeof(uint32_t) - headersz;
-	main_hdr->srcaddr   = headersz;
+	main_hdr->blocksize =
+		cpu_to_le32(payloadsz + sizeof(uint32_t) - headersz);
+	main_hdr->srcaddr   = cpu_to_le32(headersz);
 	main_hdr->ext       = has_ext;
-	main_hdr->destaddr  = params->addr;
-	main_hdr->execaddr  = params->ep;
+	main_hdr->destaddr  = cpu_to_le32(params->addr);
+	main_hdr->execaddr  = cpu_to_le32(params->ep);
 
 	e = image_find_option(IMAGE_CFG_BOOT_FROM);
 	if (e)
@@ -246,7 +247,7 @@ static void *image_create_v0(size_t *imagesz, struct image_tool_params *params,
 		main_hdr->nandeccmode = e->nandeccmode;
 	e = image_find_option(IMAGE_CFG_NAND_PAGESZ);
 	if (e)
-		main_hdr->nandpagesize = e->nandpagesz;
+		main_hdr->nandpagesize = cpu_to_le16(e->nandpagesz);
 	main_hdr->checksum = image_checksum8(image,
 					     sizeof(struct main_hdr_v0));
 
@@ -255,15 +256,17 @@ static void *image_create_v0(size_t *imagesz, struct image_tool_params *params,
 		int cfgi, datai;
 
 		ext_hdr = image + sizeof(struct main_hdr_v0);
-		ext_hdr->offset = 0x40;
+		ext_hdr->offset = cpu_to_le32(0x40);
 
 		for (cfgi = 0, datai = 0; cfgi < cfgn; cfgi++) {
 			e = &image_cfg[cfgi];
 			if (e->type != IMAGE_CFG_DATA)
 				continue;
 
-			ext_hdr->rcfg[datai].raddr = e->regdata.raddr;
-			ext_hdr->rcfg[datai].rdata = e->regdata.rdata;
+			ext_hdr->rcfg[datai].raddr =
+				cpu_to_le32(e->regdata.raddr);
+			ext_hdr->rcfg[datai].rdata =
+				cpu_to_le32(e->regdata.rdata);
 			datai++;
 		}
 
@@ -376,12 +379,13 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 	cur += sizeof(struct main_hdr_v1);
 
 	/* Fill the main header */
-	main_hdr->blocksize    = payloadsz - headersz + sizeof(uint32_t);
-	main_hdr->headersz_lsb = headersz & 0xFFFF;
+	main_hdr->blocksize    =
+		cpu_to_le32(payloadsz - headersz + sizeof(uint32_t));
+	main_hdr->headersz_lsb = cpu_to_le16(headersz & 0xFFFF);
 	main_hdr->headersz_msb = (headersz & 0xFFFF0000) >> 16;
-	main_hdr->destaddr     = params->addr;
-	main_hdr->execaddr     = params->ep;
-	main_hdr->srcaddr      = headersz;
+	main_hdr->destaddr     = cpu_to_le32(params->addr);
+	main_hdr->execaddr     = cpu_to_le32(params->ep);
+	main_hdr->srcaddr      = cpu_to_le32(headersz);
 	main_hdr->ext          = hasext;
 	main_hdr->version      = 1;
 	e = image_find_option(IMAGE_CFG_BOOT_FROM);
@@ -397,7 +401,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 	binarye = image_find_option(IMAGE_CFG_BINARY);
 	if (binarye) {
 		struct opt_hdr_v1 *hdr = cur;
-		unsigned int *args;
+		uint32_t *args;
 		size_t binhdrsz;
 		struct stat s;
 		int argi;
@@ -418,18 +422,18 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 			(binarye->binary.nargs + 1) * sizeof(unsigned int) +
 			s.st_size;
 		binhdrsz = ALIGN_SUP(binhdrsz, 32);
-		hdr->headersz_lsb = binhdrsz & 0xFFFF;
+		hdr->headersz_lsb = cpu_to_le16(binhdrsz & 0xFFFF);
 		hdr->headersz_msb = (binhdrsz & 0xFFFF0000) >> 16;
 
 		cur += sizeof(struct opt_hdr_v1);
 
 		args = cur;
-		*args = binarye->binary.nargs;
+		*args = cpu_to_le32(binarye->binary.nargs);
 		args++;
 		for (argi = 0; argi < binarye->binary.nargs; argi++)
-			args[argi] = binarye->binary.args[argi];
+			args[argi] = cpu_to_le32(binarye->binary.args[argi]);
 
-		cur += (binarye->binary.nargs + 1) * sizeof(unsigned int);
+		cur += (binarye->binary.nargs + 1) * sizeof(uint32_t);
 
 		ret = fread(cur, s.st_size, 1, bin);
 		if (ret != 1) {
@@ -714,7 +718,8 @@ static void kwbimage_set_header(void *ptr, struct stat *sbuf, int ifd,
 	free(image_cfg);
 
 	/* Build and add image checksum header */
-	checksum = image_checksum32((uint32_t *)ptr, sbuf->st_size);
+	checksum =
+		cpu_to_le32(image_checksum32((uint32_t *)ptr, sbuf->st_size));
 	size = write(ifd, &checksum, sizeof(uint32_t));
 	if (size != sizeof(uint32_t)) {
 		fprintf(stderr, "Error:%s - Checksum write %d bytes %s\n",
diff --git a/tools/kwbimage.h b/tools/kwbimage.h
index 9d2585c..e6e3d1d 100644
--- a/tools/kwbimage.h
+++ b/tools/kwbimage.h
@@ -9,6 +9,7 @@
 #ifndef _KWBIMAGE_H_
 #define _KWBIMAGE_H_
 
+#include <compiler.h>
 #include <stdint.h>
 
 #define KWBIMAGE_MAX_CONFIG	((0x1dc - 0x20)/sizeof(struct reg_config))
@@ -115,7 +116,7 @@ struct opt_hdr_v1 {
 #define OPT_HDR_V1_REGISTER_TYPE 0x3
 
 #define KWBHEADER_V1_SIZE(hdr) \
-	(((hdr)->headersz_msb << 16) | (hdr)->headersz_lsb)
+	(((hdr)->headersz_msb << 16) | le16_to_cpu((hdr)->headersz_lsb))
 
 enum kwbimage_cmd {
 	CMD_INVALID,
-- 
1.8.3

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH v1 2/2] kwbimage: fix size computations for v1 images
  2015-11-27  8:43 [U-Boot] [PATCH v1 0/2] This little series fixes some issues with kwbimage Reinhard Pfau
  2015-11-27  8:43 ` [U-Boot] [PATCH v1 1/2] kwbimage: fix endianess issue Reinhard Pfau
@ 2015-11-27  8:43 ` Reinhard Pfau
  2015-11-27 10:31   ` Stefan Roese
  1 sibling, 1 reply; 5+ messages in thread
From: Reinhard Pfau @ 2015-11-27  8:43 UTC (permalink / raw)
  To: u-boot

Fix computation of haeder size and binary header size.
Size of opt header and some 32bit values were not taken into account. This could
result in invalid boot images (due to the wrong binary header size, the image could
claim to have another extension header after the binary extension although there
is none).

Use "uint32_t" instead of "unsigned int" for header size computation.

Signed-off-by: Reinhard Pfau <reinhard.pfau@gdsys.cc>
Cc: Luka Perkov <luka.perkov@sartura.hr>
---

 tools/kwbimage.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index afba73f..ff06b19 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -324,8 +324,9 @@ static size_t image_headersz_v1(struct image_tool_params *params,
 			return 0;
 		}
 
-		headersz += s.st_size +
-			binarye->binary.nargs * sizeof(unsigned int);
+		headersz += sizeof(struct opt_hdr_v1) +
+			s.st_size +
+			(binarye->binary.nargs + 2) * sizeof(uint32_t);
 		if (hasext)
 			*hasext = 1;
 	}
@@ -419,7 +420,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 		fstat(fileno(bin), &s);
 
 		binhdrsz = sizeof(struct opt_hdr_v1) +
-			(binarye->binary.nargs + 1) * sizeof(unsigned int) +
+			(binarye->binary.nargs + 2) * sizeof(uint32_t) +
 			s.st_size;
 		binhdrsz = ALIGN_SUP(binhdrsz, 32);
 		hdr->headersz_lsb = cpu_to_le16(binhdrsz & 0xFFFF);
-- 
1.8.3

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH v1 1/2] kwbimage: fix endianess issue
  2015-11-27  8:43 ` [U-Boot] [PATCH v1 1/2] kwbimage: fix endianess issue Reinhard Pfau
@ 2015-11-27 10:31   ` Stefan Roese
  0 siblings, 0 replies; 5+ messages in thread
From: Stefan Roese @ 2015-11-27 10:31 UTC (permalink / raw)
  To: u-boot

On 27.11.2015 09:43, Reinhard Pfau wrote:
> KWB image header values are in little endian (LE).
> So adding appropriate cpu_to_leXX() calls to allow building those images
> on BE hosts, too.
>
> Signed-off-by: Reinhard Pfau <reinhard.pfau@gdsys.cc>
> Cc: Luka Perkov <luka.perkov@sartura.hr>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH v1 2/2] kwbimage: fix size computations for v1 images
  2015-11-27  8:43 ` [U-Boot] [PATCH v1 2/2] kwbimage: fix size computations for v1 images Reinhard Pfau
@ 2015-11-27 10:31   ` Stefan Roese
  0 siblings, 0 replies; 5+ messages in thread
From: Stefan Roese @ 2015-11-27 10:31 UTC (permalink / raw)
  To: u-boot

On 27.11.2015 09:43, Reinhard Pfau wrote:
> Fix computation of haeder size and binary header size.
> Size of opt header and some 32bit values were not taken into account. This could
> result in invalid boot images (due to the wrong binary header size, the image could
> claim to have another extension header after the binary extension although there
> is none).
>
> Use "uint32_t" instead of "unsigned int" for header size computation.
>
> Signed-off-by: Reinhard Pfau <reinhard.pfau@gdsys.cc>
> Cc: Luka Perkov <luka.perkov@sartura.hr>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-11-27 10:31 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-27  8:43 [U-Boot] [PATCH v1 0/2] This little series fixes some issues with kwbimage Reinhard Pfau
2015-11-27  8:43 ` [U-Boot] [PATCH v1 1/2] kwbimage: fix endianess issue Reinhard Pfau
2015-11-27 10:31   ` Stefan Roese
2015-11-27  8:43 ` [U-Boot] [PATCH v1 2/2] kwbimage: fix size computations for v1 images Reinhard Pfau
2015-11-27 10:31   ` Stefan Roese

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox