[PATCH 2/3] cmd: fix gpt enumerate

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Sat Aug 26 03:53:42 CEST 2023


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.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
---
 cmd/gpt.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

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);
-- 
2.40.1



More information about the U-Boot mailing list