From: Davidlohr Bueso <davidlohr@hp.com>
To: Karel Zak <kzak@redhat.com>
Cc: util-linux@vger.kernel.org, Davidlohr Bueso <davidlohr@hp.com>
Subject: [PATCH 3/3] libfdisk: gpt: loosen check fot pmbr size in lba
Date: Sat, 21 Sep 2013 20:45:16 -0700 [thread overview]
Message-ID: <1379821516-2540-3-git-send-email-davidlohr@hp.com> (raw)
In-Reply-To: <1379821516-2540-1-git-send-email-davidlohr@hp.com>
While most disk partitioning tools out there create a pMBR's size in lba
to be the lesser of the whole disk or 2Tib, Microsoft apparently does not[1].
It always sets the entry to the maximum 32-bit limitation - even though a
drive may be smaller than that.
Loosen this check and only verify that the size is either the whole disk
or 0xFFFFFFFF. No tool in its right mind would set it to any value
other than these.
[1] http://thestarman.pcministry.com/asm/mbr/GPT.htm#GPTPT
Signed-off-by: Davidlohr Bueso <davidlohr@hp.com>
---
libfdisk/src/gpt.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/libfdisk/src/gpt.c b/libfdisk/src/gpt.c
index bb9e9a7..83659cb 100644
--- a/libfdisk/src/gpt.c
+++ b/libfdisk/src/gpt.c
@@ -477,6 +477,7 @@ static int valid_pmbr(struct fdisk_context *cxt)
{
int i, part = 0, ret = 0; /* invalid by default */
struct gpt_legacy_mbr *pmbr = NULL;
+ uint32_t sz_lba = 0;
if (!cxt->firstsector)
goto done;
@@ -517,12 +518,15 @@ check_hybrid:
/*
* Protective MBRs take up the lesser of the whole disk
* or 2 TiB (32bit LBA), ignoring the rest of the disk.
+ * Some partitioning programs, nonetheless, choose to set
+ * the size to the maximum 32-bit limitation, disregarding
+ * the disk size.
*
* Hybrid MBRs do not necessarily comply with this.
*/
if (ret == GPT_MBR_PROTECTIVE) {
- if (le32_to_cpu(pmbr->partition_record[part].size_in_lba) !=
- min((uint32_t) cxt->total_sectors - 1, 0xFFFFFFFF))
+ sz_lba = le32_to_cpu(pmbr->partition_record[part].size_in_lba);
+ if (sz_lba != (uint32_t) cxt->total_sectors - 1 && sz_lba != 0xFFFFFFFF)
ret = 0;
}
done:
--
1.7.11.7
next prev parent reply other threads:[~2013-09-22 3:45 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-22 3:45 [PATCH 1/3] libfdisk: gpt: avoid unnecessary pmbr check Davidlohr Bueso
2013-09-22 3:45 ` [PATCH 2/3] libfdisk: gpt: do not assume first pt record is always pmbr Davidlohr Bueso
2013-09-25 9:26 ` Karel Zak
2013-09-22 3:45 ` Davidlohr Bueso [this message]
2013-09-25 9:27 ` [PATCH 3/3] libfdisk: gpt: loosen check fot pmbr size in lba Karel Zak
2013-09-25 9:25 ` [PATCH 1/3] libfdisk: gpt: avoid unnecessary pmbr check Karel Zak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1379821516-2540-3-git-send-email-davidlohr@hp.com \
--to=davidlohr@hp.com \
--cc=kzak@redhat.com \
--cc=util-linux@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox