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