From: "Marek Behún" <kabel@kernel.org>
To: Stefan Roese <sr@denx.de>
Cc: u-boot@lists.denx.de, pali@kernel.org,
"Chris Packham" <judge.packham@gmail.com>,
"Baruch Siach" <baruch@tkos.co.il>,
"Dennis Gilmore" <dgilmore@redhat.com>,
"Mario Six" <mario.six@gdsys.cc>,
"Jon Nettleton" <jon@solid-run.com>,
"Marek Behún" <marek.behun@nic.cz>
Subject: [PATCH u-boot-marvell v3 24/39] tools: kwbimage: Refactor kwbimage header size determination
Date: Fri, 24 Sep 2021 23:07:01 +0200 [thread overview]
Message-ID: <20210924210716.29752-25-kabel@kernel.org> (raw)
In-Reply-To: <20210924210716.29752-1-kabel@kernel.org>
From: Marek Behún <marek.behun@nic.cz>
Add functions kwbheader_size() and kwbheader_size_for_csum().
Refactor code determining header size to use these functions.
Refactor header checksum determining function.
Remove stuff that is not needed anymore.
This simplifies the code a little and fixes one instance of validating
header size meant for checksum instead of whole header size.
Signed-off-by: Marek Behún <marek.behun@nic.cz>
---
tools/kwbimage.c | 29 +++++++----------------------
tools/kwbimage.h | 35 +++++++++++++++++++++++------------
tools/kwboot.c | 22 ++++++++++------------
3 files changed, 40 insertions(+), 46 deletions(-)
diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 944a108cee..d1f4f93e0f 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -280,14 +280,6 @@ static uint8_t image_checksum8(void *start, uint32_t len)
return csum;
}
-size_t kwbimage_header_size(unsigned char *ptr)
-{
- if (kwbimage_version((void *)ptr) == 0)
- return sizeof(struct main_hdr_v0);
- else
- return KWBHEADER_V1_SIZE((struct main_hdr_v1 *)ptr);
-}
-
/*
* Verify checksum over a complete header that includes the checksum field.
* Return 1 when OK, otherwise 0.
@@ -298,7 +290,7 @@ static int main_hdr_checksum_ok(void *hdr)
struct main_hdr_v0 *main_hdr = (struct main_hdr_v0 *)hdr;
uint8_t checksum;
- checksum = image_checksum8(hdr, kwbimage_header_size(hdr));
+ checksum = image_checksum8(hdr, kwbheader_size_for_csum(hdr));
/* Calculated checksum includes the header checksum field. Compensate
* for that.
*/
@@ -1649,8 +1641,8 @@ static int kwbimage_check_image_types(uint8_t type)
static int kwbimage_verify_header(unsigned char *ptr, int image_size,
struct image_tool_params *params)
{
- uint8_t checksum;
- size_t header_size = kwbimage_header_size(ptr);
+ size_t header_size = kwbheader_size(ptr);
+ uint8_t csum;
if (header_size > image_size)
return -FDT_ERR_BADSTRUCTURE;
@@ -1663,17 +1655,10 @@ static int kwbimage_verify_header(unsigned char *ptr, int image_size,
struct main_hdr_v0 *mhdr = (struct main_hdr_v0 *)ptr;
if (mhdr->ext & 0x1) {
- struct ext_hdr_v0 *ext_hdr;
-
- if (header_size + sizeof(*ext_hdr) > image_size)
- return -FDT_ERR_BADSTRUCTURE;
+ struct ext_hdr_v0 *ext_hdr = (void *)(mhdr + 1);
- ext_hdr = (struct ext_hdr_v0 *)
- (ptr + sizeof(struct main_hdr_v0));
- checksum = image_checksum8(ext_hdr,
- sizeof(struct ext_hdr_v0)
- - sizeof(uint8_t));
- if (checksum != ext_hdr->checksum)
+ csum = image_checksum8(ext_hdr, sizeof(*ext_hdr) - 1);
+ if (csum != ext_hdr->checksum)
return -FDT_ERR_BADSTRUCTURE;
}
} else if (kwbimage_version(ptr) == 1) {
@@ -1832,7 +1817,7 @@ static int kwbimage_generate(struct image_tool_params *params,
static int kwbimage_extract_subimage(void *ptr, struct image_tool_params *params)
{
struct main_hdr_v1 *mhdr = (struct main_hdr_v1 *)ptr;
- size_t header_size = kwbimage_header_size(ptr);
+ size_t header_size = kwbheader_size(ptr);
struct opt_hdr_v1 *ohdr;
int idx = params->pflag;
int cur_idx = 0;
diff --git a/tools/kwbimage.h b/tools/kwbimage.h
index 738034beb1..56a748d4cf 100644
--- a/tools/kwbimage.h
+++ b/tools/kwbimage.h
@@ -69,11 +69,6 @@ struct ext_hdr_v0 {
uint8_t checksum;
} __packed;
-struct kwb_header {
- struct main_hdr_v0 kwb_hdr;
- struct ext_hdr_v0 kwb_exthdr;
-} __packed;
-
/* Structure of the main header, version 1 (Armada 370/38x/XP) */
struct main_hdr_v1 {
uint8_t blockid; /* 0x0 */
@@ -195,13 +190,6 @@ struct register_set_hdr_v1 {
#define OPT_HDR_V1_BINARY_TYPE 0x2
#define OPT_HDR_V1_REGISTER_TYPE 0x3
-#define KWBHEADER_V0_SIZE(hdr) \
- (((hdr)->ext & 0x1) ? sizeof(struct kwb_header) : \
- sizeof(struct main_hdr_v0))
-
-#define KWBHEADER_V1_SIZE(hdr) \
- (((hdr)->headersz_msb << 16) | le16_to_cpu((hdr)->headersz_lsb))
-
enum kwbimage_cmd {
CMD_INVALID,
CMD_BOOT_FROM,
@@ -235,6 +223,29 @@ static inline unsigned int kwbimage_version(const void *header)
return ptr[8];
}
+static inline size_t kwbheader_size(const void *header)
+{
+ if (kwbimage_version(header) == 0) {
+ const struct main_hdr_v0 *hdr = header;
+
+ return sizeof(*hdr) +
+ (hdr->ext & 0x1) ? sizeof(struct ext_hdr_v0) : 0;
+ } else {
+ const struct main_hdr_v1 *hdr = header;
+
+ return (hdr->headersz_msb << 16) |
+ le16_to_cpu(hdr->headersz_lsb);
+ }
+}
+
+static inline size_t kwbheader_size_for_csum(const void *header)
+{
+ if (kwbimage_version(header) == 0)
+ return sizeof(struct main_hdr_v0);
+ else
+ return kwbheader_size(header);
+}
+
static inline uint32_t opt_hdr_v1_size(const struct opt_hdr_v1 *ohdr)
{
return (ohdr->headersz_msb << 16) | le16_to_cpu(ohdr->headersz_lsb);
diff --git a/tools/kwboot.c b/tools/kwboot.c
index e47bf94e89..e60f7c5b7a 100644
--- a/tools/kwboot.c
+++ b/tools/kwboot.c
@@ -583,10 +583,7 @@ kwboot_xmodem(int tty, const void *_img, size_t size)
int rc, pnum;
size_t hdrsz;
- if (kwbimage_version(img) == 0)
- hdrsz = KWBHEADER_V0_SIZE((struct main_hdr_v0 *)img);
- else
- hdrsz = KWBHEADER_V1_SIZE((struct main_hdr_v1 *)img);
+ hdrsz = kwbheader_size(img);
kwboot_printv("Waiting 2s and flushing tty\n");
sleep(2); /* flush isn't effective without it */
@@ -746,9 +743,13 @@ out:
}
static uint8_t
-kwboot_img_csum8(void *_data, size_t size)
+kwboot_hdr_csum8(const void *hdr)
{
- uint8_t *data = _data, csum;
+ const uint8_t *data = hdr;
+ uint8_t csum;
+ size_t size;
+
+ size = kwbheader_size_for_csum(hdr);
for (csum = 0; size-- > 0; data++)
csum += *data;
@@ -794,17 +795,14 @@ kwboot_img_patch_hdr(void *img, size_t size)
goto out;
}
- if (image_ver == 0)
- hdrsz = sizeof(*hdr);
- else
- hdrsz = KWBHEADER_V1_SIZE(hdr);
+ hdrsz = kwbheader_size(hdr);
if (size < hdrsz) {
errno = EINVAL;
goto out;
}
- csum = kwboot_img_csum8(hdr, hdrsz) - hdr->checksum;
+ csum = kwboot_hdr_csum8(hdr) - hdr->checksum;
if (csum != hdr->checksum) {
errno = EINVAL;
goto out;
@@ -860,7 +858,7 @@ kwboot_img_patch_hdr(void *img, size_t size)
hdr->blockid = IBR_HDR_UART_ID;
}
- hdr->checksum = kwboot_img_csum8(hdr, hdrsz) - csum;
+ hdr->checksum = kwboot_hdr_csum8(hdr) - csum;
rc = 0;
out:
--
2.32.0
next prev parent reply other threads:[~2021-09-24 21:13 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-24 21:06 [PATCH u-boot-marvell v3 00/39] kwboot higher baudrate Marek Behún
2021-08-17 22:59 ` [PATCH u-boot-marvell v3 19/39] tools: kwbimage: Simplify iteration over version 1 optional headers Marek Behún
2021-08-25 12:49 ` [PATCH u-boot-marvell v3 39/39] MAINTAINERS: Add entry for kwbimage / kwboot tools Marek Behún
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 01/39] tools: kwbimage: Fix printf format warning Marek Behún
2021-10-01 6:00 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 02/39] tools: kwboot: Fix buffer overflow in kwboot_terminal() Marek Behún
2021-10-01 6:14 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 03/39] tools: kwboot: Make the quit sequence buffer const Marek Behún
2021-10-01 6:14 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 04/39] tools: kwboot: Refactor and fix writing buffer Marek Behún
2021-10-01 6:14 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 05/39] tools: kwboot: Print version information header Marek Behún
2021-10-01 6:15 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 06/39] tools: kwboot: Fix kwboot_xm_sendblock() function when kwboot_tty_recv() fails Marek Behún
2021-10-01 6:15 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 07/39] tools: kwboot: Fix return type of kwboot_xm_makeblock() function Marek Behún
2021-10-01 6:15 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 08/39] tools: kwboot: Fix comparison of integers with different size Marek Behún
2021-10-01 6:16 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 09/39] tools: kwboot: Fix printing progress Marek Behún
2021-10-01 6:16 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 10/39] tools: kwboot: Print newline on error when progress was not completed Marek Behún
2021-10-01 6:16 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 11/39] tools: kwboot: Split sending image into header and data stages Marek Behún
2021-10-01 6:17 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 12/39] tools: kwboot: Use a function to check whether received byte is a Xmodem reply Marek Behún
2021-10-01 6:17 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 13/39] tools: kwboot: Allow non-xmodem text output from BootROM only in a specific case Marek Behún
2021-10-01 6:19 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 14/39] tools: kwboot: Print new line after SPL output Marek Behún
2021-10-01 6:20 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 15/39] tools: kwboot: Allow greater timeout when executing header code Marek Behún
2021-10-01 6:20 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 16/39] tools: kwboot: Prevent waiting indefinitely if no xmodem reply is received Marek Behún
2021-10-01 6:21 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 17/39] tools: kwboot: Properly finish xmodem transfer Marek Behún
2021-10-01 6:21 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 18/39] tools: kwboot: Always call kwboot_img_patch_hdr() Marek Behún
2021-10-01 6:22 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 20/39] tools: kwboot: Don't patch image header if signed Marek Behún
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 21/39] tools: kwboot: Patch source address in image header Marek Behún
2021-10-01 6:22 ` Stefan Roese
2021-09-24 21:06 ` [PATCH u-boot-marvell v3 22/39] tools: kwboot: Patch destination address to DDR area for SPI image Marek Behún
2021-10-01 6:23 ` Stefan Roese
2021-09-24 21:07 ` [PATCH u-boot-marvell v3 23/39] tools: kwbimage: Refactor image_version() Marek Behún
2021-10-01 6:23 ` Stefan Roese
2021-09-24 21:07 ` Marek Behún [this message]
2021-10-01 6:23 ` [PATCH u-boot-marvell v3 24/39] tools: kwbimage: Refactor kwbimage header size determination Stefan Roese
2021-09-24 21:07 ` [PATCH u-boot-marvell v3 25/39] tools: kwbimage: Update comments describing kwbimage v1 structures Marek Behún
2021-10-01 6:24 ` Stefan Roese
2021-09-24 21:07 ` [PATCH u-boot-marvell v3 26/39] tools: kwboot: Round up header size to 128 B when patching Marek Behún
2021-10-01 6:24 ` Stefan Roese
2021-09-24 21:07 ` [PATCH u-boot-marvell v3 27/39] tools: kwboot: Explicitly check against size of struct main_hdr_v1 Marek Behún
2021-10-01 6:24 ` Stefan Roese
2021-09-24 21:07 ` [PATCH u-boot-marvell v3 28/39] tools: kwboot: Support higher baudrates when booting via UART Marek Behún
2021-10-01 6:27 ` Stefan Roese
2021-09-24 21:07 ` [PATCH u-boot-marvell v3 29/39] tools: kwboot: Allow any baudrate on Linux Marek Behún
2021-10-01 6:28 ` Stefan Roese
2021-09-24 21:07 ` [PATCH u-boot-marvell v3 30/39] tools: kwboot: Check whether baudrate was set to requested value Marek Behún
2021-10-01 6:29 ` Stefan Roese
2021-09-24 21:07 ` [PATCH u-boot-marvell v3 31/39] tools: kwboot: Fix initializing tty device Marek Behún
2021-10-01 6:29 ` Stefan Roese
2021-09-24 21:07 ` [PATCH u-boot-marvell v3 32/39] tools: kwboot: Disable tty interbyte timeout Marek Behún
2021-10-01 6:29 ` Stefan Roese
2021-09-24 21:07 ` [PATCH u-boot-marvell v3 33/39] tools: kwboot: Disable non-blocking mode Marek Behún
2021-09-24 21:07 ` [PATCH u-boot-marvell v3 34/39] tools: kwboot: Cosmetic fix Marek Behún
2021-10-01 6:30 ` Stefan Roese
2021-09-24 21:07 ` [PATCH u-boot-marvell v3 35/39] tools: kwboot: Avoid code repetition in kwboot_img_patch() Marek Behún
2021-10-01 6:30 ` Stefan Roese
2021-09-24 21:07 ` [PATCH u-boot-marvell v3 36/39] tools: kwboot: Update file header Marek Behún
2021-10-01 6:30 ` Stefan Roese
2021-09-24 21:07 ` [PATCH u-boot-marvell v3 37/39] tools: kwboot: Add Pali and Marek as authors Marek Behún
2021-10-01 6:30 ` Stefan Roese
2021-09-24 21:07 ` [PATCH u-boot-marvell v3 38/39] doc/kwboot.1: Update man page Marek Behún
2021-10-01 6:31 ` Stefan Roese
2021-09-30 18:14 ` [PATCH u-boot-marvell v3 00/39] kwboot higher baudrate Pali Rohár
2021-10-01 4:52 ` Stefan Roese
2021-10-01 7:46 ` Stefan Roese
2021-10-01 9:16 ` Marek Behún
2021-10-01 9:23 ` Stefan Roese
2021-10-01 9:34 ` Marek Behún
2021-10-01 9:28 ` Pali Rohár
2021-10-01 9:58 ` Stefan Roese
2021-10-01 10:09 ` Pali Rohár
2021-10-01 10:28 ` Stefan Roese
2021-10-01 10:39 ` Pali Rohár
2021-10-01 10:43 ` Stefan Roese
2021-10-01 10:49 ` Pali Rohár
2021-10-01 11:01 ` Stefan Roese
2021-10-01 12:59 ` Tom Rini
2021-10-03 9:52 ` Stefan Roese
2021-10-01 10:36 ` Marek Behún
2021-10-01 10:40 ` Stefan Roese
2021-10-01 10:45 ` Marek Behún
2021-10-22 8:38 ` Stefan Roese
2021-10-22 8:48 ` Pali Rohár
2021-10-22 8:50 ` Stefan Roese
[not found] ` <20210924210716.29752-40-kabel@kernel.org>
2021-10-01 6:31 ` [PATCH u-boot-marvell v3 39/39] MAINTAINERS: Add entry for kwbimage / kwboot tools Stefan Roese
2021-10-01 12:33 ` [PATCH u-boot-marvell v3 00/39] kwboot higher baudrate Stefan Roese
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210924210716.29752-25-kabel@kernel.org \
--to=kabel@kernel.org \
--cc=baruch@tkos.co.il \
--cc=dgilmore@redhat.com \
--cc=jon@solid-run.com \
--cc=judge.packham@gmail.com \
--cc=marek.behun@nic.cz \
--cc=mario.six@gdsys.cc \
--cc=pali@kernel.org \
--cc=sr@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.