cmd: fix gpt enumerate
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sat, 26 Aug 2023 01:53:42 +0000 (03:53 +0200)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sun, 27 Aug 2023 06:21:07 +0000 (08:21 +0200)
Do not assume that partitions are numbered continuously starting at 1.

Only a single partition table type can exist on a block device. If we found
a GPT partition table, we must not re-enumerate with the MBR partition
driver which would find the protective partition.

Fixes: 12fc1f3bb223 ("cmd: gpt: add eMMC and GPT support")
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
cmd/gpt.c

index d0e165d..99ca0a6 100644 (file)
--- a/cmd/gpt.c
+++ b/cmd/gpt.c
@@ -691,12 +691,13 @@ static int gpt_enumerate(struct blk_desc *desc)
                int ret;
                int i;
 
+               if (part_drv->test(desc))
+                       continue;
+
                for (i = 1; i < part_drv->max_entries; i++) {
                        ret = part_drv->get_info(desc, i, &pinfo);
-                       if (ret) {
-                               /* no more entries in table */
-                               break;
-                       }
+                       if (ret)
+                               continue;
 
                        ptr = &part_list[str_len];
                        tmp_len = strlen((const char *)pinfo.name);
@@ -711,9 +712,10 @@ static int gpt_enumerate(struct blk_desc *desc)
                        /* One byte for space(" ") delimiter */
                        ptr[tmp_len] = ' ';
                }
+               if (*part_list)
+                       part_list[strlen(part_list) - 1] = 0;
+               break;
        }
-       if (*part_list)
-               part_list[strlen(part_list) - 1] = 0;
        debug("setenv gpt_partition_list %s\n", part_list);
 
        return env_set("gpt_partition_list", part_list);