aboutsummaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorDavidlohr Bueso <davidlohr@hp.com>2013-09-11 17:24:57 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-09-11 18:59:16 -0400
commit3e69ac344007bec5e3987ac86619e140fbc79b72 (patch)
treebbaf03e104edb90d68c45453abbc4e7f48a7b899 /block
parent33afd7a7df1a1f82675857a75572cdf4a8599e9f (diff)
partitions/efi: do not require gpt partition to begin at sector 1
When detecting a valid protective MBR, the Linux kernel isn't picky about the partition (1-4) the 0xEE is at, but, unlike other operating systems, it does require it to begin at the second sector (sector 1). This check, apart from it not being enforced by UEFI, and causing Linux to potentially fail to detect any *valid* partitions on the disk, can present problems when dealing with hybrid MBRs[1]. For compatibility reasons, if the first partition is hybridized, the 0xEE partition must be small enough to ensure that it only protects the GPT data structures - as opposed to the the whole disk in a protective MBR. This problem is very well described by Rod Smith[1]: where MBR-only partitioning programs (such as older versions of fdisk) can see some of the disk space as unallocated, thus loosing the purpose of the 0xEE partition's protection of GPT data structures. By dropping this check, this patch enables Linux to be more flexible when probing for GPT disklabels. [1] http://www.rodsbooks.com/gdisk/hybrid.html#reactions Signed-off-by: Davidlohr Bueso <davidlohr@hp.com> Reviewed-by: Karel Zak <kzak@redhat.com> Acked-by: Matt Fleming <matt.fleming@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'block')
-rw-r--r--block/partitions/efi.c3
1 files changed, 0 insertions, 3 deletions
diff --git a/block/partitions/efi.c b/block/partitions/efi.c
index 7a2b74f0d06f..1b499dc8fc78 100644
--- a/block/partitions/efi.c
+++ b/block/partitions/efi.c
@@ -158,9 +158,6 @@ static inline int pmbr_part_valid(gpt_mbr_record *part)
158 if (le32_to_cpu(part->starting_lba) != GPT_PRIMARY_PARTITION_TABLE_LBA) 158 if (le32_to_cpu(part->starting_lba) != GPT_PRIMARY_PARTITION_TABLE_LBA)
159 goto invalid; 159 goto invalid;
160 160
161 if (le32_to_cpu(part->start_sector) != 1UL)
162 goto invalid;
163
164 return 1; 161 return 1;
165invalid: 162invalid:
166 return 0; 163 return 0;