[PATCH] tools: pblimage: fix image header verification function

Pali Rohár pali at kernel.org
Fri Feb 25 21:36:03 CET 2022


On Thursday 17 February 2022 11:51:36 Zhiqiang Hou wrote:
> From: Hou Zhiqiang <Zhiqiang.Hou at nxp.com>
> 
> The Layerscape platforms have different RCW header value from FSL
> PowerPC platforms, the current image header verification callback
> is only working on PowerPC, it will fail on Layerscape, this patch
> is to fix this issue.
> 
> This is a historical problem and exposed by the following patch:
> http://patchwork.ozlabs.org/project/uboot/patch/20220114173443.9877-1-pali@kernel.org
> 
> Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou at nxp.com>

Hello Tom! Could you look at this change? It should unblock applying my above patch.

> ---
>  Makefile         |  2 +-
>  tools/pblimage.c | 10 ++++++++--
>  tools/pblimage.h |  3 ++-
>  3 files changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 4b152249ca..3c2bc9741c 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1410,7 +1410,7 @@ MKIMAGEFLAGS_u-boot-spl.kwb = -n $(KWD_CONFIG_FILE) \
>  	$(if $(KEYDIR),-k $(KEYDIR))
>  
>  MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
> -		-R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimage
> +		-R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -A $(ARCH) -T pblimage
>  
>  ifeq ($(CONFIG_MPC85xx)$(CONFIG_OF_SEPARATE),yy)
>  UBOOT_BIN := u-boot-with-dtb.bin
> diff --git a/tools/pblimage.c b/tools/pblimage.c
> index 3c823e96cf..bd639c276f 100644
> --- a/tools/pblimage.c
> +++ b/tools/pblimage.c
> @@ -230,19 +230,25 @@ static int pblimage_verify_header(unsigned char *ptr, int image_size,
>  			struct image_tool_params *params)
>  {
>  	struct pbl_header *pbl_hdr = (struct pbl_header *) ptr;
> +	uint32_t rcwheader;
> +
> +	if (params->arch == IH_ARCH_ARM)
> +		rcwheader = RCW_ARM_HEADER;
> +	else
> +		rcwheader = RCW_PPC_HEADER;
>  
>  	/* Only a few checks can be done: search for magic numbers */
>  	if (ENDIANNESS == 'l') {
>  		if (pbl_hdr->preamble != reverse_byte(RCW_PREAMBLE))
>  			return -FDT_ERR_BADSTRUCTURE;
>  
> -		if (pbl_hdr->rcwheader != reverse_byte(RCW_HEADER))
> +		if (pbl_hdr->rcwheader != reverse_byte(rcwheader))
>  			return -FDT_ERR_BADSTRUCTURE;
>  	} else {
>  		if (pbl_hdr->preamble != RCW_PREAMBLE)
>  			return -FDT_ERR_BADSTRUCTURE;
>  
> -		if (pbl_hdr->rcwheader != RCW_HEADER)
> +		if (pbl_hdr->rcwheader != rcwheader)
>  			return -FDT_ERR_BADSTRUCTURE;
>  	}
>  	return 0;
> diff --git a/tools/pblimage.h b/tools/pblimage.h
> index 81c5492926..0222e8067b 100644
> --- a/tools/pblimage.h
> +++ b/tools/pblimage.h
> @@ -8,7 +8,8 @@
>  
>  #define RCW_BYTES	64
>  #define RCW_PREAMBLE	0xaa55aa55
> -#define RCW_HEADER	0x010e0100
> +#define RCW_ARM_HEADER	0x01ee0100
> +#define RCW_PPC_HEADER	0x010e0100
>  
>  struct pbl_header {
>  	uint32_t preamble;
> -- 
> 2.25.1
> 


More information about the U-Boot mailing list