From a107c61b4180fb5bfe7d0044a25d6db829b8b00f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Pali=20Roh=C3=A1r?= Date: Fri, 23 Jul 2021 11:14:14 +0200 Subject: [PATCH] tools: kwbimage: Mark all BootROM structures __packed MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit These structures must have specific size without padding, so mark them as packed via the de-facto standard macro __packed. Also replace PACKED macro. Signed-off-by: Pali Rohár Reviewed-by: Marek Behún Reviewed-by: Stefan Roese --- tools/kwbimage.h | 30 ++++++++++++++++++------------ tools/kwboot.c | 8 +------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/tools/kwbimage.h b/tools/kwbimage.h index 9f86da4..e063e3e 100644 --- a/tools/kwbimage.h +++ b/tools/kwbimage.h @@ -11,6 +11,12 @@ #include #include +#ifdef __GNUC__ +#define __packed __attribute((packed)) +#else +#define __packed +#endif + #define KWBIMAGE_MAX_CONFIG ((0x1dc - 0x20)/sizeof(struct reg_config)) #define MAX_TEMPBUF_LEN 32 @@ -46,12 +52,12 @@ struct main_hdr_v0 { uint16_t rsvd2; /* 0x1C-0x1D */ uint8_t ext; /* 0x1E */ uint8_t checksum; /* 0x1F */ -}; +} __packed; struct ext_hdr_v0_reg { uint32_t raddr; uint32_t rdata; -}; +} __packed; #define EXT_HDR_V0_REG_COUNT ((0x1dc - 0x20) / sizeof(struct ext_hdr_v0_reg)) @@ -61,12 +67,12 @@ struct ext_hdr_v0 { struct ext_hdr_v0_reg rcfg[EXT_HDR_V0_REG_COUNT]; uint8_t reserved2[7]; 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 { @@ -87,7 +93,7 @@ struct main_hdr_v1 { uint16_t reserved5; /* 0x1C-0x1D */ uint8_t ext; /* 0x1E */ uint8_t checksum; /* 0x1F */ -}; +} __packed; /* * Main header options @@ -109,21 +115,21 @@ struct opt_hdr_v1 { uint8_t headersz_msb; uint16_t headersz_lsb; char data[0]; -}; +} __packed; /* * Public Key data in DER format */ struct pubkey_der_v1 { uint8_t key[524]; -}; +} __packed; /* * Signature (RSA 2048) */ struct sig_v1 { uint8_t sig[256]; -}; +} __packed; /* * Structure of secure header (Armada 38x) @@ -146,7 +152,7 @@ struct secure_hdr_v1 { uint8_t next; /* 0x25E0 */ uint8_t reserved4; /* 0x25E1 */ uint16_t reserved5; /* 0x25E2 - 0x25E3 */ -}; +} __packed; /* * Structure of register set @@ -159,14 +165,14 @@ struct register_set_hdr_v1 { struct { uint32_t address; /* 0x4+8*N - 0x7+8*N */ uint32_t value; /* 0x8+8*N - 0xB+8*N */ - } entry; + } __packed entry; struct { uint8_t next; /* 0xC+8*N */ uint8_t delay; /* 0xD+8*N */ uint16_t reserved; /* 0xE+8*N - 0xF+8*N */ - } last_entry; + } __packed last_entry; } data[]; -}; +} __packed; /* * Value 0 in register_set_hdr_v1 delay field is special. diff --git a/tools/kwboot.c b/tools/kwboot.c index 4be094c..2683e53 100644 --- a/tools/kwboot.c +++ b/tools/kwboot.c @@ -26,12 +26,6 @@ #include #include -#ifdef __GNUC__ -#define PACKED __attribute((packed)) -#else -#define PACKED -#endif - /* * Marvell BootROM UART Sensing */ @@ -68,7 +62,7 @@ struct kwboot_block { uint8_t _pnum; uint8_t data[128]; uint8_t csum; -} PACKED; +} __packed; #define KWBOOT_BLK_RSP_TIMEO 1000 /* ms */ -- 2.7.4