Module Name:    src
Committed By:   martin
Date:           Sun Mar 24 17:29:58 UTC 2024

Modified Files:
        src/usr.sbin/sysinst: gpt.c

Log Message:
PR 58061: fix bug in the GPT backend: when inserting a partition
(i.e. not adding it at the end) a bogus ID was returned for the new
partition.


To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.32 src/usr.sbin/sysinst/gpt.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/sysinst/gpt.c
diff -u src/usr.sbin/sysinst/gpt.c:1.31 src/usr.sbin/sysinst/gpt.c:1.32
--- src/usr.sbin/sysinst/gpt.c:1.31	Thu Feb  8 20:51:24 2024
+++ src/usr.sbin/sysinst/gpt.c	Sun Mar 24 17:29:58 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: gpt.c,v 1.31 2024/02/08 20:51:24 andvar Exp $	*/
+/*	$NetBSD: gpt.c,v 1.32 2024/03/24 17:29:58 martin Exp $	*/
 
 /*
  * Copyright 2018 The NetBSD Foundation, Inc.
@@ -569,12 +569,14 @@ gpt_get_part_attr_str(const struct disk_
 static bool
 gpt_insert_part_into_list(struct gpt_disk_partitions *parts,
     struct gpt_part_entry **list,
-    struct gpt_part_entry *entry, const char **err_msg)
+    struct gpt_part_entry *entry, const char **err_msg, part_id *new_id)
 {
 	struct gpt_part_entry *p, *last;
+	part_id pno;
 
 	/* find the first entry past the new one (if any) */
-	for (last = NULL, p = *list; p != NULL; last = p, p = p->gp_next) {
+	for (pno = 0, last = NULL, p = *list; p != NULL;
+	    last = p, p = p->gp_next, pno++) {
 		if (p->gp_start > entry->gp_start)
 			break;
 	}
@@ -609,7 +611,8 @@ gpt_insert_part_into_list(struct gpt_dis
 	}
 	if (*list == NULL)
 		*list = entry;
-
+	if (new_id != NULL)
+		*new_id = pno;
 	return true;
 }
 
@@ -651,7 +654,7 @@ gpt_set_part_info(struct disk_partitions
 			*n = *p;
 			p->gp_flags &= ~GPEF_ON_DISK;
 			if (!gpt_insert_part_into_list(parts, &parts->obsolete,
-			    n, err_msg))
+			    n, err_msg, NULL))
 				return false;
 		} else if (info->size != p->gp_size) {
 			p->gp_flags |= GPEF_RESIZED;
@@ -1076,6 +1079,7 @@ gpt_add_part(struct disk_partitions *arg
 	struct disk_part_free_space space;
 	struct disk_part_info data = *info;
 	struct gpt_part_entry *p, *n;
+	part_id pno;
 	bool ok;
 
 	if (err_msg != NULL)
@@ -1107,7 +1111,8 @@ gpt_add_part(struct disk_partitions *arg
 		return NO_PART;
 	}
 	p->gp_flags |= GPEF_MODIFIED;
-	ok = gpt_insert_part_into_list(parts, &parts->partitions, p, err_msg);
+	ok = gpt_insert_part_into_list(parts, &parts->partitions, p,
+	    err_msg, &pno);
 	if (ok) {
 		if (info->flags & PTI_INSTALL_TARGET) {
 			/* update target mark - we can only have one */
@@ -1119,7 +1124,7 @@ gpt_add_part(struct disk_partitions *arg
 
 		parts->dp.num_part++;
 		parts->dp.free_space -= p->gp_size;
-		return parts->dp.num_part-1;
+		return pno;
 	} else {
 		free(p);
 		return NO_PART;
@@ -1157,7 +1162,7 @@ gpt_delete_partition(struct disk_partiti
 	res = true;
 	if (p->gp_flags & GPEF_ON_DISK) {
 		if (!gpt_insert_part_into_list(parts, &parts->obsolete,
-		    p, err_msg))
+		    p, err_msg, NULL))
 			res = false;
 	} else {
 		free(p);

Reply via email to