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