diff mbox series

[u-boot-marvell,3/5] arm: mvebu: Check that kwbimage blockid matches boot mode

Message ID 20211111155953.31526-4-kabel@kernel.org
State Superseded
Delegated to: Stefan Roese
Headers show
Series More verifications for kwbimage in SPL | expand

Commit Message

Marek Behún Nov. 11, 2021, 3:59 p.m. UTC
From: Pali Rohár <pali@kernel.org>

Each boot mode has its own kwbimage specified by blockid. So check that
kwbimage is valid by blockid.

Signed-off-by: Pali Rohár <pali@kernel.org>
Signed-off-by: Marek Behún <marek.behun@nic.cz>
---
 arch/arm/mach-mvebu/spl.c | 32 +++++++++++++++++++++++---------
 1 file changed, 23 insertions(+), 9 deletions(-)

Comments

Stefan Roese Nov. 15, 2021, 8:59 a.m. UTC | #1
On 11/11/21 16:59, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> Each boot mode has its own kwbimage specified by blockid. So check that
> kwbimage is valid by blockid.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Signed-off-by: Marek Behún <marek.behun@nic.cz>

Again, some minor comments below...

Other than this:

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

> ---
>   arch/arm/mach-mvebu/spl.c | 32 +++++++++++++++++++++++---------
>   1 file changed, 23 insertions(+), 9 deletions(-)
> 
> diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c
> index deef6e76f3..662f430503 100644
> --- a/arch/arm/mach-mvebu/spl.c
> +++ b/arch/arm/mach-mvebu/spl.c
> @@ -118,22 +118,36 @@ int spl_parse_board_header(struct spl_image_info *spl_image,
>   	 * (including SPL content) which is not included in U-Boot image_header.
>   	 */
>   	if (mhdr->version != 1 ||
> -	    ((mhdr->headersz_msb << 16) | mhdr->headersz_lsb) < sizeof(*mhdr) ||
> -	    (
> +	    ((mhdr->headersz_msb << 16) | mhdr->headersz_lsb) < sizeof(*mhdr)) {
> +		printf("ERROR: Invalid kwbimage v1\n");
> +		return -EINVAL;
> +	}
> +
>   #ifdef CONFIG_SPL_SPI_FLASH_SUPPORT
> -	     mhdr->blockid != IBR_HDR_SPI_ID &&
> +	if (bootdev->boot_device == BOOT_DEVICE_SPI &&
> +	    mhdr->blockid != IBR_HDR_SPI_ID) {
> +		printf("ERROR: Wrong blockid in SPI kwbimage\n");
> +		return -EINVAL;
> +	}
>   #endif
> +
>   #ifdef CONFIG_SPL_SATA
> -	     mhdr->blockid != IBR_HDR_SATA_ID &&
> +	if (bootdev->boot_device == BOOT_DEVICE_SATA &&
> +	    mhdr->blockid != IBR_HDR_SATA_ID) {
> +		printf("ERROR: Wrong blockid in SATA kwbimage\n");
> +		return -EINVAL;
> +	}
>   #endif
> +
>   #ifdef CONFIG_SPL_MMC
> -	     mhdr->blockid != IBR_HDR_SDIO_ID &&
> -#endif
> -	     1
> -	    )) {
> -		printf("ERROR: Not valid SPI/NAND/SATA/SDIO kwbimage v1\n");
> +	if ((bootdev->boot_device == BOOT_DEVICE_MMC1 ||
> +	     bootdev->boot_device == BOOT_DEVICE_MMC2 ||
> +	     bootdev->boot_device == BOOT_DEVICE_MMC2_2) &&
> +	    mhdr->blockid != IBR_HDR_SDIO_ID) {
> +		printf("ERROR: Wrong blockid in SDIO kwbimage\n");

Again it might be helpful for users to print the incorrect blockid in
these cases.

Thanks,
Stefan

>   		return -EINVAL;
>   	}
> +#endif
>   
>   	spl_image->offset = mhdr->srcaddr;
>   
> 

Viele Grüße,
Stefan Roese
diff mbox series

Patch

diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c
index deef6e76f3..662f430503 100644
--- a/arch/arm/mach-mvebu/spl.c
+++ b/arch/arm/mach-mvebu/spl.c
@@ -118,22 +118,36 @@  int spl_parse_board_header(struct spl_image_info *spl_image,
 	 * (including SPL content) which is not included in U-Boot image_header.
 	 */
 	if (mhdr->version != 1 ||
-	    ((mhdr->headersz_msb << 16) | mhdr->headersz_lsb) < sizeof(*mhdr) ||
-	    (
+	    ((mhdr->headersz_msb << 16) | mhdr->headersz_lsb) < sizeof(*mhdr)) {
+		printf("ERROR: Invalid kwbimage v1\n");
+		return -EINVAL;
+	}
+
 #ifdef CONFIG_SPL_SPI_FLASH_SUPPORT
-	     mhdr->blockid != IBR_HDR_SPI_ID &&
+	if (bootdev->boot_device == BOOT_DEVICE_SPI &&
+	    mhdr->blockid != IBR_HDR_SPI_ID) {
+		printf("ERROR: Wrong blockid in SPI kwbimage\n");
+		return -EINVAL;
+	}
 #endif
+
 #ifdef CONFIG_SPL_SATA
-	     mhdr->blockid != IBR_HDR_SATA_ID &&
+	if (bootdev->boot_device == BOOT_DEVICE_SATA &&
+	    mhdr->blockid != IBR_HDR_SATA_ID) {
+		printf("ERROR: Wrong blockid in SATA kwbimage\n");
+		return -EINVAL;
+	}
 #endif
+
 #ifdef CONFIG_SPL_MMC
-	     mhdr->blockid != IBR_HDR_SDIO_ID &&
-#endif
-	     1
-	    )) {
-		printf("ERROR: Not valid SPI/NAND/SATA/SDIO kwbimage v1\n");
+	if ((bootdev->boot_device == BOOT_DEVICE_MMC1 ||
+	     bootdev->boot_device == BOOT_DEVICE_MMC2 ||
+	     bootdev->boot_device == BOOT_DEVICE_MMC2_2) &&
+	    mhdr->blockid != IBR_HDR_SDIO_ID) {
+		printf("ERROR: Wrong blockid in SDIO kwbimage\n");
 		return -EINVAL;
 	}
+#endif
 
 	spl_image->offset = mhdr->srcaddr;