Re: [PATCH u-boot 2/4] cmd: mvebu/bubt: Validate EXT_CSD[179] eMMC register in mmc_burn_image()
+ Martin On Thursday 13 April 2023 23:10:55 Pali Rohár wrote: > When determining eMMC boot partition for a bootloader, validate that > EXT_CSD[179] eMMC register is set to recognized value. > > This prevent situation that EXT_CSD[179] Boot Enable value is improperly > parsed and passed into EXT_CSD[179] Partition Access. > > Signed-off-by: Pali Rohár > --- > cmd/mvebu/bubt.c | 24 ++-- > 1 file changed, 22 insertions(+), 2 deletions(-) > > diff --git a/cmd/mvebu/bubt.c b/cmd/mvebu/bubt.c > index ca24a5c1c4ba..b8fe7c7a1461 100644 > --- a/cmd/mvebu/bubt.c > +++ b/cmd/mvebu/bubt.c > @@ -223,9 +223,29 @@ static int mmc_burn_image(size_t image_size) > orig_part = mmc->block_dev.hwpart; > #endif > > - part = EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config); > - if (part == 7) > + if (mmc->part_config == MMCPART_NOAVAILABLE) { > part = 0; > + } else { > + switch (EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config)) { > + case 0: /* Booting from this eMMC device is disabled */ > + printf("Error - Booting from this eMMC device is > disabled\n"); > + printf("Hint: Use 'mmc partconf' command to choose boot > partition\n"); > + return -ENODEV; > + case 1: /* Boot partition 1 is used for booting */ > + part = 1; > + break; > + case 2: /* Boot partition 2 is used for booting */ > + part = 2; > + break; > + case 7: /* User area is used for booting */ > + part = 0; > + break; > + default: /* Other values are reserved / unsupported */ > + printf("Error - This eMMC device has configured > Reserved boot option\n"); > + printf("Hint: Use 'mmc partconf' command to choose boot > partition\n"); > + return -ENODEV; > + } > + } > > #ifdef CONFIG_BLK > err = blk_dselect_hwpart(blk_desc, part); > -- > 2.20.1 >
Re: [PATCH u-boot 2/4] cmd: mvebu/bubt: Validate EXT_CSD[179] eMMC register in mmc_burn_image()
On 4/13/23 23:10, Pali Rohár wrote: When determining eMMC boot partition for a bootloader, validate that EXT_CSD[179] eMMC register is set to recognized value. This prevent situation that EXT_CSD[179] Boot Enable value is improperly parsed and passed into EXT_CSD[179] Partition Access. Signed-off-by: Pali Rohár Reviewed-by: Stefan Roese Thanks, Stefan --- cmd/mvebu/bubt.c | 24 ++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/cmd/mvebu/bubt.c b/cmd/mvebu/bubt.c index ca24a5c1c4ba..b8fe7c7a1461 100644 --- a/cmd/mvebu/bubt.c +++ b/cmd/mvebu/bubt.c @@ -223,9 +223,29 @@ static int mmc_burn_image(size_t image_size) orig_part = mmc->block_dev.hwpart; #endif - part = EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config); - if (part == 7) + if (mmc->part_config == MMCPART_NOAVAILABLE) { part = 0; + } else { + switch (EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config)) { + case 0: /* Booting from this eMMC device is disabled */ + printf("Error - Booting from this eMMC device is disabled\n"); + printf("Hint: Use 'mmc partconf' command to choose boot partition\n"); + return -ENODEV; + case 1: /* Boot partition 1 is used for booting */ + part = 1; + break; + case 2: /* Boot partition 2 is used for booting */ + part = 2; + break; + case 7: /* User area is used for booting */ + part = 0; + break; + default: /* Other values are reserved / unsupported */ + printf("Error - This eMMC device has configured Reserved boot option\n"); + printf("Hint: Use 'mmc partconf' command to choose boot partition\n"); + return -ENODEV; + } + } #ifdef CONFIG_BLK err = blk_dselect_hwpart(blk_desc, part); Viele Grüße, Stefan Roese -- DENX Software Engineering GmbH, Managing Director: Erika Unter HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: s...@denx.de
[PATCH u-boot 2/4] cmd: mvebu/bubt: Validate EXT_CSD[179] eMMC register in mmc_burn_image()
When determining eMMC boot partition for a bootloader, validate that EXT_CSD[179] eMMC register is set to recognized value. This prevent situation that EXT_CSD[179] Boot Enable value is improperly parsed and passed into EXT_CSD[179] Partition Access. Signed-off-by: Pali Rohár --- cmd/mvebu/bubt.c | 24 ++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/cmd/mvebu/bubt.c b/cmd/mvebu/bubt.c index ca24a5c1c4ba..b8fe7c7a1461 100644 --- a/cmd/mvebu/bubt.c +++ b/cmd/mvebu/bubt.c @@ -223,9 +223,29 @@ static int mmc_burn_image(size_t image_size) orig_part = mmc->block_dev.hwpart; #endif - part = EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config); - if (part == 7) + if (mmc->part_config == MMCPART_NOAVAILABLE) { part = 0; + } else { + switch (EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config)) { + case 0: /* Booting from this eMMC device is disabled */ + printf("Error - Booting from this eMMC device is disabled\n"); + printf("Hint: Use 'mmc partconf' command to choose boot partition\n"); + return -ENODEV; + case 1: /* Boot partition 1 is used for booting */ + part = 1; + break; + case 2: /* Boot partition 2 is used for booting */ + part = 2; + break; + case 7: /* User area is used for booting */ + part = 0; + break; + default: /* Other values are reserved / unsupported */ + printf("Error - This eMMC device has configured Reserved boot option\n"); + printf("Hint: Use 'mmc partconf' command to choose boot partition\n"); + return -ENODEV; + } + } #ifdef CONFIG_BLK err = blk_dselect_hwpart(blk_desc, part); -- 2.20.1