From: Mikhail Kshevetskiy Date: Mon, 19 Jan 2026 22:33:03 +0000 (+0300) Subject: disk: part: fix partition search boundaries X-Git-Tag: v2026.04-rc2~22^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0ced9ef07361980d1418eab33ee1f41274d1e0e2;p=thirdparty%2Fu-boot.git disk: part: fix partition search boundaries 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 Acked-by: Quentin Schulz Reviewed-By: Michael Trimarchi --- 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. */