[PATCH v3 1/3] disk: part: fix partition search boundaries
Mikhail Kshevetskiy
mikhail.kshevetskiy at iopsys.eu
Mon Jan 19 23:51:35 CET 2026
On 1/20/26 01:40, Michael Nazzareno Trimarchi wrote:
> Hi Mikhail
>
> On Mon, Jan 19, 2026 at 11:33 PM Mikhail Kshevetskiy
> <mikhail.kshevetskiy at iopsys.eu> 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 <mikhail.kshevetskiy at iopsys.eu>
>> Acked-by: Quentin Schulz <quentin.schulz at cherry.de>
>> ---
>> 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 <michael at amarulasolutions.com>
>
>> 2.51.0
>>
>
More information about the U-Boot
mailing list