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