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