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]>
---
 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. */
-- 
2.51.0

Reply via email to