- libparted: check PMBR before GPT partition table (#805272)
- tests: add a test for the new behavior
This commit is contained in:
parent
2dc62a294f
commit
6c34102208
@ -0,0 +1,91 @@
|
||||
From 9343e79fee796a142a4bd12674aa3fdb56526eb6 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Tue, 20 Mar 2012 16:08:25 -0700
|
||||
Subject: [PATCH 1/2] libparted: check PMBR before GPT partition table
|
||||
(#805272)
|
||||
|
||||
The UEFI spec requires that a valid GPT disk label have a PMBR
|
||||
partition. This moves the PMBR check to before the GPT check,
|
||||
exiting gpt_probe with a 0 if the PMBR is not valid.
|
||||
|
||||
The previous behavior would cause problems in the following situation:
|
||||
1. format a disk as GPT
|
||||
2. re-format it as MSDOS using tools that don't understand GPT
|
||||
|
||||
Subsequent operations with parted would then complain about the invlid
|
||||
PMBR, but would not allow the disk to be used as a msdos disk. This
|
||||
change causes parted to tread the disk as a msdos disk.
|
||||
|
||||
* libparted/labels/gpt.c (gpt_probe): Move _pmbr_is_valid test
|
||||
---
|
||||
libparted/labels/gpt.c | 44 +++++++++++++-------------------------------
|
||||
1 files changed, 13 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c
|
||||
index 84bdc12..e57b3a2 100644
|
||||
--- a/libparted/labels/gpt.c
|
||||
+++ b/libparted/labels/gpt.c
|
||||
@@ -465,6 +465,17 @@ gpt_probe (const PedDevice *dev)
|
||||
if (dev->length <= 1)
|
||||
return 0;
|
||||
|
||||
+ void *label;
|
||||
+ if (!ptt_read_sector (dev, 0, &label))
|
||||
+ return 0;
|
||||
+
|
||||
+ if (!_pmbr_is_valid ((const LegacyMBR_t *) label))
|
||||
+ {
|
||||
+ free (label);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ free (label);
|
||||
+
|
||||
void *pth_raw = ped_malloc (pth_get_size (dev));
|
||||
if (ped_device_read (dev, pth_raw, 1, GPT_HEADER_SECTORS)
|
||||
|| ped_device_read (dev, pth_raw, dev->length - 1, GPT_HEADER_SECTORS))
|
||||
@@ -472,40 +483,11 @@ gpt_probe (const PedDevice *dev)
|
||||
gpt = pth_new_from_raw (dev, pth_raw);
|
||||
if (gpt->Signature == PED_CPU_TO_LE64 (GPT_HEADER_SIGNATURE))
|
||||
gpt_sig_found = 1;
|
||||
+ pth_free (gpt);
|
||||
}
|
||||
-
|
||||
free (pth_raw);
|
||||
|
||||
- pth_free (gpt);
|
||||
-
|
||||
- if (!gpt_sig_found)
|
||||
- return 0;
|
||||
-
|
||||
- void *label;
|
||||
- if (!ptt_read_sector (dev, 0, &label))
|
||||
- return 0;
|
||||
-
|
||||
- int ok = 1;
|
||||
- if (!_pmbr_is_valid ((const LegacyMBR_t *) label))
|
||||
- {
|
||||
- int ex_status = ped_exception_throw
|
||||
- (PED_EXCEPTION_WARNING,
|
||||
- PED_EXCEPTION_YES_NO,
|
||||
- _("%s contains GPT signatures, indicating that it has "
|
||||
- "a GPT table. However, it does not have a valid "
|
||||
- "fake msdos partition table, as it should. Perhaps "
|
||||
- "it was corrupted -- possibly by a program that "
|
||||
- "doesn't understand GPT partition tables. Or "
|
||||
- "perhaps you deleted the GPT table, and are now "
|
||||
- "using an msdos partition table. Is this a GPT "
|
||||
- "partition table?"),
|
||||
- dev->path);
|
||||
- if (ex_status == PED_EXCEPTION_NO)
|
||||
- ok = 0;
|
||||
- }
|
||||
-
|
||||
- free (label);
|
||||
- return ok;
|
||||
+ return gpt_sig_found;
|
||||
}
|
||||
|
||||
static PedDisk *
|
||||
--
|
||||
1.7.7.6
|
||||
|
34
parted-3.1-tests-add-t0301-overwrite-gpt-pmbr.sh.patch
Normal file
34
parted-3.1-tests-add-t0301-overwrite-gpt-pmbr.sh.patch
Normal file
@ -0,0 +1,34 @@
|
||||
From 98f1556d8a134f54d62ebdac27e9d16aa7884983 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Tue, 20 Mar 2012 17:17:10 -0700
|
||||
Subject: [PATCH 2/2] tests: add t0301-overwrite-gpt-pmbr.sh
|
||||
|
||||
Make sure parted checks the PMBR before the GPT partition table.
|
||||
|
||||
* NEWS: Update with new GPT behavior
|
||||
* tests/Makefile.am: Add new test
|
||||
* tests/overwrite-gpt-pmbr.sh: new test
|
||||
---
|
||||
NEWS | 7 +++++++
|
||||
1 files changed, 7 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index fe0fcdd..b0a0657 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -1,5 +1,12 @@
|
||||
GNU parted NEWS -*- outline -*-
|
||||
|
||||
+* Noteworthy changes in release 3.1-2 (2012-03-21) [Fedora]
|
||||
+
|
||||
+** Bug Fixes
|
||||
+
|
||||
+ libparted: Treat disks without a PMBR as msdos labeled disks
|
||||
+ even if they have GPT partition tables.
|
||||
+
|
||||
* Noteworthy changes in release 3.1 (2012-03-02) [stable]
|
||||
|
||||
** New features
|
||||
--
|
||||
1.7.7.6
|
||||
|
@ -4,7 +4,7 @@
|
||||
Summary: The GNU disk partition manipulation program
|
||||
Name: parted
|
||||
Version: 3.1
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
License: GPLv3+
|
||||
Group: Applications/System
|
||||
URL: http://www.gnu.org/software/parted
|
||||
@ -14,6 +14,8 @@ Source1: ftp://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz.sig
|
||||
Source2: pubkey.jim.meyering
|
||||
|
||||
Patch0: parted-3.0-libparted-copy-pmbr_boot-when-duplicating-GPT-disk.patch
|
||||
Patch1: parted-3.1-libparted-check-PMBR-before-GPT-partition-table-8052.patch
|
||||
Patch2: parted-3.1-tests-add-t0301-overwrite-gpt-pmbr.sh.patch
|
||||
|
||||
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildRequires: e2fsprogs-devel
|
||||
@ -145,6 +147,10 @@ fi
|
||||
|
||||
|
||||
%changelog
|
||||
* Wed Mar 21 2012 Brian C. Lane <bcl@redhat.com> 3.1-2
|
||||
- libparted: check PMBR before GPT partition table (#805272)
|
||||
- tests: add a test for the new behavior
|
||||
|
||||
* Tue Mar 13 2012 Brian C. Lane <bcl@redhat.com> 3.1-1
|
||||
- Rebase to upstream parted v3.1
|
||||
- removed merged patches
|
||||
|
Loading…
Reference in New Issue
Block a user