summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorae <ae@FreeBSD.org>2014-03-31 09:34:46 +0000
committerae <ae@FreeBSD.org>2014-03-31 09:34:46 +0000
commited08ddc2a121b4c44139b654ff7f830a2f3b090e (patch)
tree5eca270e1a8d4dbf6563853ed6b487b3e4ded871
parentb357774f50743f92e6f3a63766ab5243e3a56265 (diff)
downloadFreeBSD-src-ed08ddc2a121b4c44139b654ff7f830a2f3b090e.zip
FreeBSD-src-ed08ddc2a121b4c44139b654ff7f830a2f3b090e.tar.gz
MFC r263468:
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
-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 d37eee5..55153aa 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) {
OpenPOWER on IntegriCloud