From 528c9a93d2d5483b28d0bf4cab8f5598f581d79096086c95fbf9a9e0f82c4e9f Mon Sep 17 00:00:00 2001 From: Sebastian Parschauer Date: Mon, 28 Aug 2017 11:36:52 +0000 Subject: [PATCH] Accepting request 519106 from home:sparschauer:branches:Base:System - Drop using deprecated configure option "--disable-Werror" - Drop (SUSE specific) support for hybrid pMBR (gpt_sync_mbr label) (fate#317849, bsc#1041322) - remove: parted-gpt-mbr-sync.patch - remove: libparted-ppc-prepboot-in-syncmbr.patch - remove: parted-workaround-windows7-gpt-implementation.patch - refresh patches - libparted: Fix starting CHS in protective MBR (bsc#969165) - add: libparted-fix-starting-CHS-in-protective-MBR.patch OBS-URL: https://build.opensuse.org/request/show/519106 OBS-URL: https://build.opensuse.org/package/show/Base:System/parted?expand=0&rev=132 --- ...d-fix-starting-CHS-in-protective-MBR.patch | 30 ++ libparted-make-BLKRRPART-more-robust.patch | 12 +- libparted-ppc-prepboot-in-syncmbr.patch | 18 - ...rted-set-swap-flag-on-GPT-partitions.patch | 40 +- parted-gpt-mbr-sync.patch | 354 ------------------ ...rkaround-windows7-gpt-implementation.patch | 18 - parted.changes | 13 + parted.spec | 9 +- 8 files changed, 70 insertions(+), 424 deletions(-) create mode 100644 libparted-fix-starting-CHS-in-protective-MBR.patch delete mode 100644 libparted-ppc-prepboot-in-syncmbr.patch delete mode 100644 parted-gpt-mbr-sync.patch delete mode 100644 parted-workaround-windows7-gpt-implementation.patch diff --git a/libparted-fix-starting-CHS-in-protective-MBR.patch b/libparted-fix-starting-CHS-in-protective-MBR.patch new file mode 100644 index 0000000..669184b --- /dev/null +++ b/libparted-fix-starting-CHS-in-protective-MBR.patch @@ -0,0 +1,30 @@ +From: Petr Uzel +Date: Thu, 10 Mar 2016 14:18:52 +0100 +Subject: libparted: Fix starting CHS in protective MBR +References: bsc#969165 +Patch-mainline: v3.3 +Git-commit: df6770d213b60320426a3ee0bed118d063b40fc5 + +The CHS address for protective partition start in protective MBR +should be 0/0/2, according to UEFI spec (v2.6, section 5.2.1). + +* libparted/labels/gpt.c (_write_pmbr): Fix starting CHS address + +Reported by Steffen Winterfeldt in https://bugzilla.suse.com/969165 + +Signed-off-by: Petr Uzel +--- + libparted/labels/gpt.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/libparted/labels/gpt.c ++++ b/libparted/labels/gpt.c +@@ -1143,7 +1143,7 @@ _write_pmbr (PedDevice *dev, bool pmbr_b + + pmbr->Signature = PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE); + pmbr->PartitionRecord[0].OSType = EFI_PMBR_OSTYPE_EFI; +- pmbr->PartitionRecord[0].StartSector = 1; ++ pmbr->PartitionRecord[0].StartSector = 2; + pmbr->PartitionRecord[0].EndHead = 0xFE; + pmbr->PartitionRecord[0].EndSector = 0xFF; + pmbr->PartitionRecord[0].EndTrack = 0xFF; diff --git a/libparted-make-BLKRRPART-more-robust.patch b/libparted-make-BLKRRPART-more-robust.patch index fe88d96..756c595 100644 --- a/libparted-make-BLKRRPART-more-robust.patch +++ b/libparted-make-BLKRRPART-more-robust.patch @@ -2,11 +2,9 @@ libparted/arch/linux.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) -Index: parted-3.1/libparted/arch/linux.c -=================================================================== ---- parted-3.1.orig/libparted/arch/linux.c -+++ parted-3.1/libparted/arch/linux.c -@@ -40,6 +40,7 @@ +--- a/libparted/arch/linux.c ++++ b/libparted/arch/linux.c +@@ -39,6 +39,7 @@ #include #include #include /* for uname() */ @@ -14,7 +12,7 @@ Index: parted-3.1/libparted/arch/linux.c #include #include #ifdef ENABLE_DEVICE_MAPPER -@@ -2901,14 +2902,15 @@ static int +@@ -3102,14 +3103,15 @@ static int _kernel_reread_part_table (PedDevice* dev) { LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); @@ -33,7 +31,7 @@ Index: parted-3.1/libparted/arch/linux.c if (!retry_count) { ped_exception_throw ( -@@ -2918,10 +2920,12 @@ _kernel_reread_part_table (PedDevice* de +@@ -3119,10 +3121,12 @@ _kernel_reread_part_table (PedDevice* de "table on %s (%s). As a result, it may not " "reflect all of your changes until after reboot."), dev->path, strerror (errno)); diff --git a/libparted-ppc-prepboot-in-syncmbr.patch b/libparted-ppc-prepboot-in-syncmbr.patch deleted file mode 100644 index 8dbad9b..0000000 --- a/libparted-ppc-prepboot-in-syncmbr.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- - libparted/labels/gpt.c | 3 +++ - 1 file changed, 3 insertions(+) - -Index: parted-3.2/libparted/labels/gpt.c -=================================================================== ---- parted-3.2.orig/libparted/labels/gpt.c -+++ parted-3.2/libparted/labels/gpt.c -@@ -1216,6 +1216,9 @@ _part_to_ostype (PedPartition* part) - if (strncmp (part->fs_type->name, "hfs", 3) == 0) return 0xaf; - if (strstr (part->fs_type->name, "swap")) return 0x82; - } -+#ifdef __PPC__ -+ if (part->num == 1) return 0x41; /* PARTITION_PREP */ -+#endif - return 0x83; // Everything else is Linux - } - diff --git a/libparted-set-swap-flag-on-GPT-partitions.patch b/libparted-set-swap-flag-on-GPT-partitions.patch index 55dd54b..011b408 100644 --- a/libparted-set-swap-flag-on-GPT-partitions.patch +++ b/libparted-set-swap-flag-on-GPT-partitions.patch @@ -25,7 +25,7 @@ Signed-off-by: Sebastian Parschauer int raid; int boot; int bios_grub; -@@ -918,7 +919,8 @@ _parse_part_entry (PedDisk *disk, GuidPa +@@ -818,7 +819,8 @@ _parse_part_entry (PedDisk *disk, GuidPa gpt_part_data->name[i] = 0; gpt_part_data->translated_name = 0; @@ -35,7 +35,7 @@ Signed-off-by: Sebastian Parschauer = gpt_part_data->boot = gpt_part_data->hp_service = gpt_part_data->hidden = gpt_part_data->msftres = gpt_part_data->msftdata -@@ -941,6 +943,8 @@ _parse_part_entry (PedDisk *disk, GuidPa +@@ -841,6 +843,8 @@ _parse_part_entry (PedDisk *disk, GuidPa gpt_part_data->raid = 1; else if (!guid_cmp (gpt_part_data->type, PARTITION_LVM_GUID)) gpt_part_data->lvm = 1; @@ -44,7 +44,7 @@ Signed-off-by: Sebastian Parschauer else if (!guid_cmp (gpt_part_data->type, PARTITION_HPSERVICE_GUID)) gpt_part_data->hp_service = 1; else if (!guid_cmp (gpt_part_data->type, PARTITION_MSFT_RESERVED_GUID)) -@@ -1568,6 +1572,7 @@ gpt_partition_new (const PedDisk *disk, +@@ -1361,6 +1365,7 @@ gpt_partition_new (const PedDisk *disk, gpt_part_data->type = PARTITION_LINUX_DATA_GUID; gpt_part_data->lvm = 0; @@ -52,7 +52,7 @@ Signed-off-by: Sebastian Parschauer gpt_part_data->raid = 0; gpt_part_data->boot = 0; gpt_part_data->bios_grub = 0; -@@ -1656,6 +1661,11 @@ gpt_partition_set_system (PedPartition * +@@ -1449,6 +1454,11 @@ gpt_partition_set_system (PedPartition * gpt_part_data->type = PARTITION_LVM_GUID; return 1; } @@ -64,7 +64,7 @@ Signed-off-by: Sebastian Parschauer if (gpt_part_data->raid) { gpt_part_data->type = PARTITION_RAID_GUID; -@@ -1720,11 +1730,6 @@ gpt_partition_set_system (PedPartition * +@@ -1513,11 +1523,6 @@ gpt_partition_set_system (PedPartition * gpt_part_data->type = PARTITION_APPLE_HFS_GUID; return 1; } @@ -76,7 +76,7 @@ Signed-off-by: Sebastian Parschauer } gpt_part_data->type = PARTITION_LINUX_DATA_GUID; -@@ -1843,6 +1848,7 @@ gpt_partition_set_flag (PedPartition *pa +@@ -1636,6 +1641,7 @@ gpt_partition_set_flag (PedPartition *pa if (state) gpt_part_data->raid = gpt_part_data->lvm @@ -84,7 +84,7 @@ Signed-off-by: Sebastian Parschauer = gpt_part_data->bios_grub = gpt_part_data->hp_service = gpt_part_data->msftres -@@ -1857,6 +1863,7 @@ gpt_partition_set_flag (PedPartition *pa +@@ -1650,6 +1656,7 @@ gpt_partition_set_flag (PedPartition *pa if (state) gpt_part_data->raid = gpt_part_data->lvm @@ -92,7 +92,7 @@ Signed-off-by: Sebastian Parschauer = gpt_part_data->boot = gpt_part_data->hp_service = gpt_part_data->msftres -@@ -1871,6 +1878,7 @@ gpt_partition_set_flag (PedPartition *pa +@@ -1664,6 +1671,7 @@ gpt_partition_set_flag (PedPartition *pa if (state) gpt_part_data->boot = gpt_part_data->lvm @@ -100,7 +100,7 @@ Signed-off-by: Sebastian Parschauer = gpt_part_data->bios_grub = gpt_part_data->hp_service = gpt_part_data->msftres -@@ -1884,6 +1892,22 @@ gpt_partition_set_flag (PedPartition *pa +@@ -1677,6 +1685,22 @@ gpt_partition_set_flag (PedPartition *pa gpt_part_data->lvm = state; if (state) gpt_part_data->boot @@ -123,7 +123,7 @@ Signed-off-by: Sebastian Parschauer = gpt_part_data->raid = gpt_part_data->bios_grub = gpt_part_data->hp_service -@@ -1900,6 +1924,7 @@ gpt_partition_set_flag (PedPartition *pa +@@ -1693,6 +1717,7 @@ gpt_partition_set_flag (PedPartition *pa gpt_part_data->boot = gpt_part_data->raid = gpt_part_data->lvm @@ -131,7 +131,7 @@ Signed-off-by: Sebastian Parschauer = gpt_part_data->bios_grub = gpt_part_data->msftres = gpt_part_data->msftdata -@@ -1914,6 +1939,7 @@ gpt_partition_set_flag (PedPartition *pa +@@ -1707,6 +1732,7 @@ gpt_partition_set_flag (PedPartition *pa gpt_part_data->boot = gpt_part_data->raid = gpt_part_data->lvm @@ -139,7 +139,7 @@ Signed-off-by: Sebastian Parschauer = gpt_part_data->bios_grub = gpt_part_data->hp_service = gpt_part_data->msftdata -@@ -1928,6 +1954,7 @@ gpt_partition_set_flag (PedPartition *pa +@@ -1721,6 +1747,7 @@ gpt_partition_set_flag (PedPartition *pa gpt_part_data->boot = gpt_part_data->raid = gpt_part_data->lvm @@ -147,7 +147,7 @@ Signed-off-by: Sebastian Parschauer = gpt_part_data->bios_grub = gpt_part_data->hp_service = gpt_part_data->msftres -@@ -1946,6 +1973,7 @@ gpt_partition_set_flag (PedPartition *pa +@@ -1739,6 +1766,7 @@ gpt_partition_set_flag (PedPartition *pa gpt_part_data->boot = gpt_part_data->raid = gpt_part_data->lvm @@ -155,7 +155,7 @@ Signed-off-by: Sebastian Parschauer = gpt_part_data->bios_grub = gpt_part_data->hp_service = gpt_part_data->msftdata -@@ -1960,6 +1988,7 @@ gpt_partition_set_flag (PedPartition *pa +@@ -1753,6 +1781,7 @@ gpt_partition_set_flag (PedPartition *pa gpt_part_data->boot = gpt_part_data->raid = gpt_part_data->lvm @@ -163,7 +163,7 @@ Signed-off-by: Sebastian Parschauer = gpt_part_data->bios_grub = gpt_part_data->hp_service = gpt_part_data->msftres -@@ -1973,6 +2002,7 @@ gpt_partition_set_flag (PedPartition *pa +@@ -1766,6 +1795,7 @@ gpt_partition_set_flag (PedPartition *pa gpt_part_data->boot = gpt_part_data->raid = gpt_part_data->lvm @@ -171,7 +171,7 @@ Signed-off-by: Sebastian Parschauer = gpt_part_data->bios_grub = gpt_part_data->hp_service = gpt_part_data->msftres -@@ -1986,6 +2016,7 @@ gpt_partition_set_flag (PedPartition *pa +@@ -1779,6 +1809,7 @@ gpt_partition_set_flag (PedPartition *pa gpt_part_data->boot = gpt_part_data->raid = gpt_part_data->lvm @@ -179,7 +179,7 @@ Signed-off-by: Sebastian Parschauer = gpt_part_data->bios_grub = gpt_part_data->hp_service = gpt_part_data->msftres -@@ -2000,7 +2031,6 @@ gpt_partition_set_flag (PedPartition *pa +@@ -1793,7 +1824,6 @@ gpt_partition_set_flag (PedPartition *pa case PED_PARTITION_LEGACY_BOOT: gpt_part_data->legacy_boot = state; return 1; @@ -187,7 +187,7 @@ Signed-off-by: Sebastian Parschauer case PED_PARTITION_ROOT: case PED_PARTITION_LBA: default: -@@ -2046,6 +2076,7 @@ gpt_partition_get_flag (const PedPartiti +@@ -1839,6 +1869,7 @@ gpt_partition_get_flag (const PedPartiti case PED_PARTITION_IRST: return gpt_part_data->irst; case PED_PARTITION_SWAP: @@ -195,7 +195,7 @@ Signed-off-by: Sebastian Parschauer case PED_PARTITION_LBA: case PED_PARTITION_ROOT: default: -@@ -2062,6 +2093,7 @@ gpt_partition_is_flag_available (const P +@@ -1855,6 +1886,7 @@ gpt_partition_is_flag_available (const P { case PED_PARTITION_RAID: case PED_PARTITION_LVM: @@ -203,7 +203,7 @@ Signed-off-by: Sebastian Parschauer case PED_PARTITION_BOOT: case PED_PARTITION_BIOS_GRUB: case PED_PARTITION_HPSERVICE: -@@ -2075,7 +2107,6 @@ gpt_partition_is_flag_available (const P +@@ -1868,7 +1900,6 @@ gpt_partition_is_flag_available (const P case PED_PARTITION_IRST: case PED_PARTITION_ESP: return 1; diff --git a/parted-gpt-mbr-sync.patch b/parted-gpt-mbr-sync.patch deleted file mode 100644 index 2ed322a..0000000 --- a/parted-gpt-mbr-sync.patch +++ /dev/null @@ -1,354 +0,0 @@ ---- - libparted/labels/gpt.c | 240 ++++++++++++++++++++++++++++++++++++++++++++++++- - 1 file changed, 236 insertions(+), 4 deletions(-) - -Index: parted-3.2/libparted/labels/gpt.c -=================================================================== ---- parted-3.2.orig/libparted/labels/gpt.c -+++ parted-3.2/libparted/labels/gpt.c -@@ -305,6 +305,7 @@ typedef struct _GPTPartitionData - } GPTPartitionData; - - static PedDiskType gpt_disk_type; -+static PedDiskType gpt_sync_mbr_disk_type; - - static inline uint32_t - pth_get_size (const PedDevice *dev) -@@ -473,8 +474,50 @@ _pmbr_is_valid (const LegacyMBR_t *mbr) - return 0; - } - -+/* checks if device has a hybrid protective MBR partition table -+ * -+ * If the 1st partition has type 0xEE that spans the entire -+ * size of the disk from sector 1 to the last sector -+ * (or 2 TiB, whichever is smaller), we consider it 'normal' GPT. -+ * Otherwise it is synced GPT with hybridized pMBR. -+ */ -+static inline int -+_has_hybrid_pmbr (const PedDevice *dev) -+{ -+ int has_hybrid_pmbr = 1; -+ -+ PED_ASSERT (dev != NULL); -+ -+ void *label; -+ if (!ptt_read_sector (dev, 0, &label)) -+ return 0; -+ -+ LegacyMBR_t mbr; -+ memcpy(&mbr, label, sizeof(mbr)); -+ -+ if (mbr.Signature != PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE)) { -+ free(label); -+ return 0; -+ } -+ -+ uint32_t efi_gpt_expected_size; -+ if ((dev->length - 1ULL) > 0xFFFFFFFFULL) -+ efi_gpt_expected_size = 0xFFFFFFFF; -+ else -+ efi_gpt_expected_size = dev->length - 1UL; -+ -+ if ((mbr.PartitionRecord[0].OSType == EFI_PMBR_OSTYPE_EFI) && -+ (mbr.PartitionRecord[0].StartingLBA == PED_CPU_TO_LE32(1)) && -+ (mbr.PartitionRecord[0].SizeInLBA == PED_CPU_TO_LE32(efi_gpt_expected_size))) -+ /* pMBR is not hybrid */ -+ has_hybrid_pmbr = 0; -+ -+ free(label); -+ return has_hybrid_pmbr; -+} -+ - static int --gpt_probe (const PedDevice *dev) -+_gpt_probe_generic(const PedDevice *dev) - { - int gpt_sig_found = 0; - -@@ -508,6 +551,19 @@ gpt_probe (const PedDevice *dev) - return gpt_sig_found; - } - -+static int -+gpt_probe (const PedDevice *dev) -+{ -+ return _gpt_probe_generic(dev) && !_has_hybrid_pmbr(dev); -+} -+ -+ -+static int -+gpt_sync_mbr_probe (const PedDevice *dev) -+{ -+ return _gpt_probe_generic(dev) && _has_hybrid_pmbr(dev); -+} -+ - static PedDisk * - gpt_alloc (const PedDevice *dev) - { -@@ -553,6 +609,50 @@ error: - } - - static PedDisk * -+gpt_sync_mbr_alloc (const PedDevice *dev) -+{ -+ PedDisk *disk; -+ GPTDiskData *gpt_disk_data; -+ PedSector data_start, data_end; -+ -+ disk = _ped_disk_alloc ((PedDevice *) dev, &gpt_sync_mbr_disk_type); -+ if (!disk) -+ goto error; -+ -+ data_start = 2 + GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / dev->sector_size; -+ data_end = dev->length - 2 -+ - GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / dev->sector_size; -+ -+ /* If the device is too small to accommodate GPT headers and one data -+ sector, reject it. */ -+ if (data_end < data_start) -+ { -+ ped_exception_throw (PED_EXCEPTION_ERROR, -+ PED_EXCEPTION_OK, -+ _("device is too small for GPT")); -+ goto error_free_disk; -+ } -+ -+ disk->disk_specific = gpt_disk_data = ped_malloc (sizeof (GPTDiskData)); -+ if (!disk->disk_specific) -+ goto error_free_disk; -+ -+ gpt_disk_data->AlternateLBA = dev->length - 1; -+ ped_geometry_init (&gpt_disk_data->data_area, dev, data_start, -+ data_end - data_start + 1); -+ gpt_disk_data->entry_count = GPT_DEFAULT_PARTITION_ENTRIES; -+ uuid_generate ((unsigned char *) &gpt_disk_data->uuid); -+ swap_uuid_and_efi_guid ((unsigned char *) (&gpt_disk_data->uuid)); -+ gpt_disk_data->pmbr_boot = 0; -+ return disk; -+ -+error_free_disk: -+ free (disk); -+error: -+ return NULL; -+} -+ -+static PedDisk * - gpt_duplicate (const PedDisk *disk) - { - PedDisk *new_disk; -@@ -963,7 +1063,7 @@ gpt_read (PedDisk *disk) - - /* motivation: let the user decide about the pmbr... during - ped_disk_probe(), they probably didn't get a choice... */ -- if (!gpt_probe (disk->dev)) -+ if (!gpt_probe (disk->dev) && !gpt_sync_mbr_probe(disk->dev)) - goto error; - - GuidPartitionTableHeader_t *gpt = NULL; -@@ -1120,11 +1220,59 @@ error: - return 0; - } - -+ -+static inline unsigned char -+_part_to_ostype (PedPartition* part) -+{ -+ if (part->fs_type) { -+ if (strncmp (part->fs_type->name, "fat", 3) == 0) return 0xc; -+ if (strncmp (part->fs_type->name, "ntfs", 4) == 0) return 0x7; -+ if (strncmp (part->fs_type->name, "hfs", 3) == 0) return 0xaf; -+ if (strstr (part->fs_type->name, "swap")) return 0x82; -+ } -+ return 0x83; // Everything else is Linux -+} -+ -+static inline PedPartition* -+_find_first_part (const PedDisk* disk) -+{ -+ PedPartition *retval = NULL, *part = NULL; -+ uint64_t lowest_end = 0xffffffffffffffff; -+ while (part = ped_disk_next_partition (disk, part)) { -+ if (part->geom.start == 0 || part->type == PED_PARTITION_METADATA -+ || part->type == PED_PARTITION_FREESPACE) -+ continue; -+ if (part->geom.end < lowest_end) { -+ retval = part; -+ lowest_end = part->geom.end; -+ } -+ } -+ return retval; -+} -+ -+static inline uint32_t -+_part_32bitmax (uint64_t in) -+{ -+ if (in > 0xFFFFFFFFULL) -+ return 0xFFFFFFFF; -+ else -+ return (uint32_t)in; -+} -+ -+ - #ifndef DISCOVER_ONLY - /* Write the protective MBR (to keep DOS happy) */ - static int --_write_pmbr (PedDevice *dev, bool pmbr_boot) -+_write_pmbr (const PedDisk *disk, bool pmbr_boot) - { -+ PedDevice * dev = disk->dev; -+ -+ /* need sync GPT -> hybrid pMBR ? */ -+ int sync_pmbr = !strcmp(disk->type->name, "gpt_sync_mbr") ? 1 : 0; -+ -+ int i, pmbr_id, first_entry = 0, last_entry = 3; -+ PedPartition *part = NULL, *esp; -+ - /* 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). -@@ -1138,6 +1286,8 @@ _write_pmbr (PedDevice *dev, bool pmbr_b - memset (pmbr->PartitionRecord, 0, sizeof pmbr->PartitionRecord); - - pmbr->Signature = PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE); -+ -+ if (!sync_pmbr) { - pmbr->PartitionRecord[0].OSType = EFI_PMBR_OSTYPE_EFI; - pmbr->PartitionRecord[0].StartSector = 1; - pmbr->PartitionRecord[0].EndHead = 0xFE; -@@ -1150,6 +1300,60 @@ _write_pmbr (PedDevice *dev, bool pmbr_b - pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (dev->length - 1UL); - if (pmbr_boot) - pmbr->PartitionRecord[0].BootIndicator = 0x80; -+ } else { -+ /* Search for an EFI System Partition */ -+ esp = _find_first_part(disk); -+ if (!esp || !esp->fs_type || strncmp (esp->fs_type->name, "fat", 3) != 0) -+ esp = NULL; -+ -+ pmbr_id = 3; -+ if (esp) { -+ pmbr_id = 0; -+ first_entry = 1; -+ last_entry = 4; -+ } -+ -+ /* Write a pseudo-PMBR so Linux is happy */ -+ pmbr->PartitionRecord[pmbr_id].OSType = EFI_PMBR_OSTYPE_EFI; -+ pmbr->PartitionRecord[pmbr_id].StartSector = 1; -+ pmbr->PartitionRecord[pmbr_id].EndHead = 0xFE; -+ pmbr->PartitionRecord[pmbr_id].EndSector = 0xFF; -+ pmbr->PartitionRecord[pmbr_id].EndTrack = 0xFF; -+ pmbr->PartitionRecord[pmbr_id].StartingLBA = PED_CPU_TO_LE32(1); -+ pmbr->PartitionRecord[pmbr_id].SizeInLBA = PED_CPU_TO_LE32 (1); -+ if (esp) -+ pmbr->PartitionRecord[pmbr_id].SizeInLBA = PED_CPU_TO_LE32 (esp->geom.end - 1); -+ -+ /* sync the first 3 GPT entries to MBR primary partitions */ -+ for (i=first_entry; i < last_entry; i++) { -+ part = ped_disk_next_partition (disk, part); -+ if (part == NULL) -+ break; -+ /* we might get a starting garbage partition */ -+ if (part->geom.start == 0 || part->type == PED_PARTITION_METADATA || part->type == PED_PARTITION_FREESPACE || part == esp) { -+ i--; -+ continue; -+ } -+ -+ /* partition can not be represented by dos label - don't sync it */ -+ if (part->geom.start > 0xFFFFFFFF || -+ (part->geom.end - part->geom.start + 1) > 0xFFFFFFFF) { -+ continue; -+ } -+ -+ pmbr->PartitionRecord[i].OSType = _part_to_ostype(part); -+ pmbr->PartitionRecord[i].StartHead = 0xFE; -+ pmbr->PartitionRecord[i].StartSector = 0xFF; -+ pmbr->PartitionRecord[i].StartTrack = 0xFF; -+ pmbr->PartitionRecord[i].EndHead = 0xFE; -+ pmbr->PartitionRecord[i].EndSector = 0xFF; -+ pmbr->PartitionRecord[i].EndTrack = 0xFF; -+ pmbr->PartitionRecord[i].StartingLBA = PED_CPU_TO_LE32 (_part_32bitmax(part->geom.start)); -+ if(((GPTPartitionData*)part->disk_specific)->boot) -+ pmbr->PartitionRecord[i].BootIndicator = 0x80; -+ pmbr->PartitionRecord[i].SizeInLBA = PED_CPU_TO_LE32 (_part_32bitmax(part->geom.end - part->geom.start + 1)); -+ } -+ } - - int write_ok = ped_device_write (dev, pmbr, GPT_PMBR_LBA, - GPT_PMBR_SECTORS); -@@ -1269,7 +1473,7 @@ gpt_write (const PedDisk *disk) - ptes_crc = efi_crc32 (ptes, ptes_bytes); - - /* Write protective MBR */ -- if (!_write_pmbr (disk->dev, gpt_disk_data->pmbr_boot)) -+ if (!_write_pmbr (disk, gpt_disk_data->pmbr_boot)) - goto error_free_ptes; - - /* Write PTH and PTEs */ -@@ -2034,6 +2238,38 @@ static PedDiskOps gpt_disk_ops = - PT_op_function_initializers (gpt) - }; - -+static PedDiskOps gpt_sync_mbr_disk_ops = -+{ -+ clobber: NULL, -+ write: NULL_IF_DISCOVER_ONLY (gpt_write), -+ -+ partition_set_name: gpt_partition_set_name, -+ partition_get_name: gpt_partition_get_name, -+ -+ /* probe function redefined */ -+ probe: gpt_sync_mbr_probe, -+ /* alloc function redefined */ -+ alloc: gpt_sync_mbr_alloc, -+ duplicate: gpt_duplicate, -+ free: gpt_free, -+ read: gpt_read, -+ partition_new: gpt_partition_new, -+ partition_duplicate: gpt_partition_duplicate, -+ partition_set_flag: gpt_partition_set_flag, -+ partition_get_flag: gpt_partition_get_flag, -+ partition_set_system: gpt_partition_set_system, -+ partition_is_flag_available: gpt_partition_is_flag_available, -+ partition_align: gpt_partition_align, -+ partition_destroy: gpt_partition_destroy, -+ partition_enumerate: gpt_partition_enumerate, -+ alloc_metadata: gpt_alloc_metadata, -+ get_max_primary_partition_count: gpt_get_max_primary_partition_count, -+ get_max_supported_partition_count: gpt_get_max_supported_partition_count, -+ partition_check: gpt_partition_check, -+ max_length: gpt_partition_max_length, -+ max_start_sector: gpt_partition_max_start_sector -+}; -+ - static PedDiskType gpt_disk_type = - { - next: NULL, -@@ -2042,16 +2278,26 @@ static PedDiskType gpt_disk_type = - features: PED_DISK_TYPE_PARTITION_NAME - }; - -+static PedDiskType gpt_sync_mbr_disk_type = -+{ -+ next: NULL, -+ name: "gpt_sync_mbr", -+ ops: &gpt_sync_mbr_disk_ops, -+ features: PED_DISK_TYPE_PARTITION_NAME -+}; -+ - void - ped_disk_gpt_init () - { - ped_disk_type_register (&gpt_disk_type); -+ ped_disk_type_register (&gpt_sync_mbr_disk_type); - } - - void - ped_disk_gpt_done () - { - ped_disk_type_unregister (&gpt_disk_type); -+ ped_disk_type_unregister (&gpt_sync_mbr_disk_type); - } - - verify (sizeof (GuidPartitionEntryAttributes_t) == 8); diff --git a/parted-workaround-windows7-gpt-implementation.patch b/parted-workaround-windows7-gpt-implementation.patch deleted file mode 100644 index 1eaddb5..0000000 --- a/parted-workaround-windows7-gpt-implementation.patch +++ /dev/null @@ -1,18 +0,0 @@ -bnc#781688 ---- - libparted/labels/gpt.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: parted-3.2/libparted/labels/gpt.c -=================================================================== ---- parted-3.2.orig/libparted/labels/gpt.c -+++ parted-3.2/libparted/labels/gpt.c -@@ -508,7 +508,7 @@ _has_hybrid_pmbr (const PedDevice *dev) - - if ((mbr.PartitionRecord[0].OSType == EFI_PMBR_OSTYPE_EFI) && - (mbr.PartitionRecord[0].StartingLBA == PED_CPU_TO_LE32(1)) && -- (mbr.PartitionRecord[0].SizeInLBA == PED_CPU_TO_LE32(efi_gpt_expected_size))) -+ ((mbr.PartitionRecord[0].SizeInLBA == PED_CPU_TO_LE32(efi_gpt_expected_size)) || (mbr.PartitionRecord[0].SizeInLBA == PED_CPU_TO_LE32(0xFFFFFFFF)))) - /* pMBR is not hybrid */ - has_hybrid_pmbr = 0; - diff --git a/parted.changes b/parted.changes index d9c2e86..ca3bc74 100644 --- a/parted.changes +++ b/parted.changes @@ -1,3 +1,16 @@ +------------------------------------------------------------------- +Thu Aug 24 16:51:37 CEST 2017 - sparschauer@suse.de + +- Drop using deprecated configure option "--disable-Werror" +- Drop (SUSE specific) support for hybrid pMBR (gpt_sync_mbr + label) (fate#317849, bsc#1041322) + - remove: parted-gpt-mbr-sync.patch + - remove: libparted-ppc-prepboot-in-syncmbr.patch + - remove: parted-workaround-windows7-gpt-implementation.patch + - refresh patches +- libparted: Fix starting CHS in protective MBR (bsc#969165) + - add: libparted-fix-starting-CHS-in-protective-MBR.patch + ------------------------------------------------------------------- Tue Aug 15 17:21:02 CEST 2017 - sparschauer@suse.de diff --git a/parted.spec b/parted.spec index 014f992..865b586 100644 --- a/parted.spec +++ b/parted.spec @@ -37,9 +37,6 @@ Patch11: parted-wipeaix.patch Patch12: libparted-partition-naming.patch #PATCH-FEATURE-SUSE more-reliable-informing-the-kernel.patch bnc#657360 petr.uzel@suse.cz Patch13: more-reliable-informing-the-kernel.patch -Patch14: parted-gpt-mbr-sync.patch -Patch15: libparted-ppc-prepboot-in-syncmbr.patch -Patch16: parted-workaround-windows7-gpt-implementation.patch Patch17: dummy-bootcode-only-for-x86.patch Patch18: parted-type.patch Patch19: parted-mac.patch @@ -80,6 +77,7 @@ Patch48: parted-mkpart-set-a-swap-flag-if-available.patch Patch49: libparted-set-swap-flag-on-GPT-partitions.patch Patch50: libparted-dasd-add-swap-flag-handling-for-DASD-CDL.patch Patch51: parted-mkpart-allow-empty-gpt-part-name.patch +Patch52: libparted-fix-starting-CHS-in-protective-MBR.patch Patch100: parted-fatresize-autoconf.patch BuildRequires: check-devel BuildRequires: device-mapper-devel >= 1.02.33 @@ -136,9 +134,6 @@ to develop applications that require these. %patch11 -p1 %patch12 -p1 %patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 %patch17 -p1 %patch18 -p1 %patch19 -p1 @@ -174,6 +169,7 @@ to develop applications that require these. %patch49 -p1 %patch50 -p1 %patch51 -p1 +%patch52 -p1 %patch100 -p1 %build @@ -184,7 +180,6 @@ AUTOPOINT=true autoreconf --force --install --enable-device-mapper=yes \ --enable-dynamic-loading=no \ --enable-selinux \ - --disable-Werror \ --disable-silent-rules make %{?_smp_mflags}