39 lines
1.4 KiB
Diff
39 lines
1.4 KiB
Diff
From 456b8c4d2424e52f7861e14d667ba7c26ca1cce3 Mon Sep 17 00:00:00 2001
|
|
From: Joel Granados Moreno <jgranado@redhat.com>
|
|
Date: Fri, 5 Jun 2009 14:14:08 +0200
|
|
Subject: [PATCH] Preserve first 446 bytes of the pmbr in gpt.
|
|
|
|
* libparted/label/gpt.c (_write_pmbr) : Make sure we read the first 446
|
|
bytes of the device when we are creating the pmbr.
|
|
---
|
|
libparted/labels/gpt.c | 13 ++++++++++++-
|
|
1 files changed, 12 insertions(+), 1 deletions(-)
|
|
|
|
diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c
|
|
index 73bdbb2..f1c4f69 100644
|
|
--- a/libparted/labels/gpt.c
|
|
+++ b/libparted/labels/gpt.c
|
|
@@ -982,7 +982,18 @@ _write_pmbr (PedDevice * dev)
|
|
{
|
|
LegacyMBR_t pmbr;
|
|
|
|
- memset(&pmbr, 0, sizeof(pmbr));
|
|
+ /* The UEFI spec is not clear about what to do with the following
|
|
+ * elements of the Protective MBR (pmbr): BootCode (0-440B),
|
|
+ * UniqueMBRSignature (440B-444B) and Unknown (444B-446B).
|
|
+ * With this in mind, we try not to modify these elements.
|
|
+ */
|
|
+ if(ped_device_read(dev, &pmbr, 0, GPT_PMBR_SECTORS) < GPT_PMBR_SECTORS)
|
|
+ memset(&pmbr, 0, sizeof(pmbr));
|
|
+
|
|
+ /* Make sure we zero out all the legacy partitions.
|
|
+ * There are 4 PartitionRecords. */
|
|
+ memset(&(pmbr.PartitionRecord), 0, sizeof(PartitionRecord_t) * 4);
|
|
+
|
|
pmbr.Signature = PED_CPU_TO_LE16(MSDOS_MBR_SIGNATURE);
|
|
pmbr.PartitionRecord[0].OSType = EFI_PMBR_OSTYPE_EFI;
|
|
pmbr.PartitionRecord[0].StartSector = 1;
|
|
--
|
|
1.6.0.6
|
|
|