Module Name:    src
Committed By:   martin
Date:           Thu Jul 25 18:55:40 UTC 2019

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

Log Message:
Do not free() an array embedded in another structure


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 src/usr.sbin/sysinst/mbr.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/mbr.c
diff -u src/usr.sbin/sysinst/mbr.c:1.17 src/usr.sbin/sysinst/mbr.c:1.18
--- src/usr.sbin/sysinst/mbr.c:1.17	Thu Jul 25 13:16:35 2019
+++ src/usr.sbin/sysinst/mbr.c	Thu Jul 25 18:55:40 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: mbr.c,v 1.17 2019/07/25 13:16:35 martin Exp $ */
+/*	$NetBSD: mbr.c,v 1.18 2019/07/25 18:55:40 martin Exp $ */
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -223,13 +223,20 @@ dump_mbr(mbr_info_t *m, const char *labe
 #endif
 
 static void
+free_last_mounted(mbr_info_t *m)
+{
+	size_t i;
+
+	for (i = 0; i < MBR_PART_COUNT; i++)
+		free(__UNCONST(m->last_mounted[i]));
+}
+
+static void
 free_mbr_info(mbr_info_t *m)
 {
 	if (m == NULL)
 		return;
-
-	for (int i = 0; i < MBR_PART_COUNT; i++)
-		free(__UNCONST(m->last_mounted[i]));
+	free_last_mounted(m);
 	free(m);
 }
 
@@ -439,19 +446,6 @@ validate_and_set_names(mbr_info_t *mbri,
 }
 #endif
 
-static void
-free_mbr(mbr_info_t *mbri)
-{
-	mbr_info_t *m = mbri->extended, *next;
-
-	while (m != NULL) {
-		next = m->extended;
-		free_mbr_info(m);
-		m = next;
-	}
-	free_mbr_info(mbri);
-}
-
 static int
 valid_mbr(struct mbr_sector *mbrs)
 {
@@ -2390,7 +2384,8 @@ mbr_free(struct disk_partitions *arg)
 	if (parts->dlabel)
 		parts->dlabel->pscheme->free(parts->dlabel);
 
-	free_mbr(&parts->mbr);
+	free_mbr_info(parts->mbr.extended);
+	free_last_mounted(&parts->mbr);
 	free(parts);
 }
 

Reply via email to