From: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Date: Sat, 26 Aug 2023 01:53:42 +0000 (+0200)
Subject: cmd: fix gpt enumerate
X-Git-Tag: v2025.01-rc5-pxa1908~871^2~6
X-Git-Url: http://git.dujemihanovic.xyz/img/sics.gif?a=commitdiff_plain;h=41cd23b7be6e097daa5c2b1eda5539de227bf745;p=u-boot.git

cmd: fix gpt enumerate

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>
---

diff --git a/cmd/gpt.c b/cmd/gpt.c
index d0e165d539..99ca0a6163 100644
--- 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);