On 1/20/26 01:40, Michael Nazzareno Trimarchi wrote: > Hi Mikhail > > On Mon, Jan 19, 2026 at 11:33 PM Mikhail Kshevetskiy > <[email protected]> wrote: >> GPT disk partition with max available number (ex: /dev/mmcblk128) can't >> be read/write from U-Boot using read/write command. Here is an example: >> >> => mmc part >> >> Partition Map for mmc device 0 -- Partition Type: EFI >> >> Part Start LBA End LBA Name >> Attributes >> Type GUID >> Partition GUID >> 1 0x00001000 0x000013ff "env1" >> attrs: 0x0000000000000000 >> type: 0fc63daf-8483-4772-8e79-3d69d8477de4 >> guid: 5452574f-2211-4433-5566-778899aabb02 >> 2 0x00001400 0x000017ff "env2" >> attrs: 0x0000000000000000 >> type: 0fc63daf-8483-4772-8e79-3d69d8477de4 >> guid: 5452574f-2211-4433-5566-778899aabb03 >> ................. >> 8 0x00158000 0x0034bfff "apps" >> attrs: 0x0000000000000000 >> type: 0fc63daf-8483-4772-8e79-3d69d8477de4 >> guid: 5452574f-2211-4433-5566-778899aabb09 >> 128 0x00000420 0x00000fff "fip" >> attrs: 0x0000000000000000 >> type: c12a7328-f81f-11d2-ba4b-00a0c93ec93b >> guid: 5452574f-2211-4433-5566-778899aabb01 >> >> => read mmc 0#fip ${loadaddr} 0 4 >> Could not find "fip" partition >> ** Bad device specification mmc 0#fip ** >> ** Bad device specification mmc 0#fip ** >> Couldn't find partition mmc 0#fip >> >> The error is caused by invalid boundary checks. This patch fixes an >> issue. >> >> Fixes: 43fd4bcefd4e ("disk: part: implement generic function >> part_get_info_by_uuid()") >> Fixes: 56670d6fb83f ("disk: part: use common api to lookup part driver") >> Signed-off-by: Mikhail Kshevetskiy <[email protected]> >> Acked-by: Quentin Schulz <[email protected]> >> --- >> disk/part.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/disk/part.c b/disk/part.c >> index 49a0fca6b89..4923dc44593 100644 >> --- a/disk/part.c >> +++ b/disk/part.c >> @@ -674,7 +674,7 @@ int part_get_info_by_name(struct blk_desc *desc, const >> char *name, >> if (!part_drv) >> return -1; >> >> - for (i = 1; i < part_drv->max_entries; i++) { >> + for (i = 1; i <= part_drv->max_entries; i++) { >> ret = part_driver_get_info(part_drv, desc, i, info); >> if (ret != 0) { >> /* -ENOSYS means no ->get_info method. */ >> @@ -709,7 +709,7 @@ int part_get_info_by_uuid(struct blk_desc *desc, const >> char *uuid, >> if (!part_drv) >> return -1; >> >> - for (i = 1; i < part_drv->max_entries; i++) { >> + for (i = 1; i <= part_drv->max_entries; i++) { >> ret = part_driver_get_info(part_drv, desc, i, info); >> if (ret != 0) { >> /* -ENOSYS means no ->get_info method. */ >> -- > Perfectly agree on the fix but still I prefer to think that things > start from 0 and not from 1 and move up to < part_drv->max_entries. > Do you consider the amount of change needed to make a more common pattern?
this will require * change part driver api (see 'struct part_driver' from include/part.h), * change all part drivers, * fix all api invocation It's quite easy to change part driver api and fix all part drivers, but it's also quite easy to miss some api invocation. > > Otherwise: > > Reviewed-By: Michael Trimarchi <[email protected]> > >> 2.51.0 >> >

