aboutsummaryrefslogtreecommitdiff
path: root/sys/boot/common/part.c
diff options
context:
space:
mode:
authorAndrey V. Elsukov <ae@FreeBSD.org>2014-03-21 09:29:01 +0000
committerAndrey V. Elsukov <ae@FreeBSD.org>2014-03-21 09:29:01 +0000
commit4c659be32538788f431fc16d41c2b3e66e9d8438 (patch)
tree2374b557f98e24856fba65e58a0049cf5ce7448b /sys/boot/common/part.c
parent196321d6b040f4e60502ff2ed33d6e558943b05a (diff)
downloadsrc-4c659be32538788f431fc16d41c2b3e66e9d8438.tar.gz
src-4c659be32538788f431fc16d41c2b3e66e9d8438.zip
When loader(8) inspects MBR, it chooses GPT as main partition table,
when MBR contains only PMBR entry or it is bootcamp-compatible. If MBR has PMBR entry and some other, the loader rejects it. Make these checks to be less strict. If loader decided that PMBR isn't suitable for GPT, it will use MBR. Reported by: Paul Thornton Tested by: Paul Thornton MFC after: 1 week
Notes
Notes: svn path=/head/; revision=263468
Diffstat (limited to 'sys/boot/common/part.c')
-rw-r--r--sys/boot/common/part.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/sys/boot/common/part.c b/sys/boot/common/part.c
index d37eee52ca77..55153aa4d8ad 100644
--- a/sys/boot/common/part.c
+++ b/sys/boot/common/part.c
@@ -634,7 +634,7 @@ ptable_open(void *dev, off_t sectors, uint16_t sectorsize,
for (i = 0, count = 0; i < NDOSPART; i++) {
if (dp[i].dp_flag != 0 && dp[i].dp_flag != 0x80) {
DEBUG("invalid partition flag %x", dp[i].dp_flag);
- break;
+ goto out;
}
#ifdef LOADER_GPT_SUPPORT
if (dp[i].dp_typ == DOSPTYP_PMBR) {
@@ -646,15 +646,12 @@ ptable_open(void *dev, off_t sectors, uint16_t sectorsize,
count++;
}
/* Do we have some invalid values? */
- if (i != NDOSPART ||
- (table->type == PTABLE_GPT && count > 1)) {
+ if (table->type == PTABLE_GPT && count > 1) {
if (dp[1].dp_typ != DOSPTYP_HFS) {
table->type = PTABLE_NONE;
- DEBUG("invalid values detected, ignore "
- "partition table");
- goto out;
- }
- DEBUG("Bootcamp detected");
+ DEBUG("Incorrect PMBR, ignore it");
+ } else
+ DEBUG("Bootcamp detected");
}
#ifdef LOADER_GPT_SUPPORT
if (table->type == PTABLE_GPT) {