Module Name: src
Committed By: martin
Date: Thu Feb 6 18:07:22 UTC 2020
Modified Files:
src/usr.sbin/sysinst: mbr.c
Log Message:
PR bin/54944: explicitly reject GPT protective MBRs.
To generate a diff of this commit:
cvs rdiff -u -r1.30 -r1.31 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.30 src/usr.sbin/sysinst/mbr.c:1.31
--- src/usr.sbin/sysinst/mbr.c:1.30 Mon Jan 27 21:21:22 2020
+++ src/usr.sbin/sysinst/mbr.c Thu Feb 6 18:07:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: mbr.c,v 1.30 2020/01/27 21:21:22 martin Exp $ */
+/* $NetBSD: mbr.c,v 1.31 2020/02/06 18:07:22 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -156,6 +156,8 @@ static size_t mbr_get_free_spaces(const
struct disk_part_free_space *result, size_t max_num_result,
daddr_t min_size, daddr_t align, daddr_t lower_bound, daddr_t ignore);
+static size_t mbr_type_from_gen_desc(const struct part_type_desc *desc);
+
/*
* Notes on the extended partition editor.
*
@@ -999,6 +1001,20 @@ mbr_read_from_disk(const char *disk, dad
return NULL;
}
mbr_calc_free_space(parts);
+ if (parts->dp.num_part == 1 &&
+ parts->dp.free_space < parts->ptn_alignment) {
+ struct disk_part_info info;
+
+ /*
+ * Check if this is a GPT protective MBR
+ */
+ if (parts->dp.pscheme->get_part_info(&parts->dp, 0, &info)
+ && info.nat_type != NULL
+ && mbr_type_from_gen_desc(info.nat_type) == 0xEE) {
+ parts->dp.pscheme->free(&parts->dp);
+ return NULL;
+ }
+ }
return &parts->dp;
}