diff --git a/0004-hfsplus_btree_search-free-node-when-hfsplus_file_rea.patch b/0004-hfsplus_btree_search-free-node-when-hfsplus_file_rea.patch new file mode 100644 index 0000000000000000000000000000000000000000..ba4b966a0ff1b725da46b88f137062182bf37ac2 --- /dev/null +++ b/0004-hfsplus_btree_search-free-node-when-hfsplus_file_rea.patch @@ -0,0 +1,35 @@ +From f7e08c5cb68f84541bb982c3dd6ab50a163bd2c2 Mon Sep 17 00:00:00 2001 +From: Li Jinlin +Date: Tue, 29 Mar 2022 11:00:07 +0800 +Subject: [PATCH 1/6] hfsplus_btree_search: free node when hfsplus_file_read + failed + +when hfsplus_file_read() return error, need to free node, otherwise there +will be memory leak + +Signed-off-by: Wu Guanghao +Signed-off-by: Li Jinlin +--- + libparted/fs/r/hfs/advfs_plus.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/libparted/fs/r/hfs/advfs_plus.c b/libparted/fs/r/hfs/advfs_plus.c +index 55e88cd..b1cc644 100644 +--- a/libparted/fs/r/hfs/advfs_plus.c ++++ b/libparted/fs/r/hfs/advfs_plus.c +@@ -101,9 +101,10 @@ hfsplus_btree_search (HfsPPrivateFile* b_tree_file, HfsPPrivateGenericKey* key, + + /* Read the root node */ + if (!hfsplus_file_read (b_tree_file, node, +- (PedSector) node_number * size, size)) ++ (PedSector) node_number * size, size)) { ++ free(node); + return 0; +- ++ } + /* Follow the white rabbit */ + while (1) { + record_number = PED_BE16_TO_CPU (desc->rec_nb); +-- +2.27.0 + diff --git a/0005-amiga_read-need-free-part-and-partition-when-constra.patch b/0005-amiga_read-need-free-part-and-partition-when-constra.patch new file mode 100644 index 0000000000000000000000000000000000000000..17d223427f8bcad6f85765501a95c3f30676d25f --- /dev/null +++ b/0005-amiga_read-need-free-part-and-partition-when-constra.patch @@ -0,0 +1,35 @@ +From 853f6bd35f22092f31595504d27c4910042631c5 Mon Sep 17 00:00:00 2001 +From: Li Jinlin +Date: Tue, 29 Mar 2022 11:01:43 +0800 +Subject: [PATCH 2/6] amiga_read: need free part and partition when + constraint_exact is NULL + +When constraint_exact is NULL and exit, need to release part and partition, +otherwise there will be memory leaks + +Signed-off-by: Wu Guanghao +Signed-off-by: Li Jinlin +--- + libparted/labels/rdb.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/libparted/labels/rdb.c b/libparted/labels/rdb.c +index cbbf29a..8096285 100644 +--- a/libparted/labels/rdb.c ++++ b/libparted/labels/rdb.c +@@ -545,8 +545,11 @@ amiga_read (PedDisk* disk) + + PedConstraint *constraint_exact + = ped_constraint_exact (&part->geom); +- if (constraint_exact == NULL) ++ if (constraint_exact == NULL) { ++ ped_partition_destroy(part); ++ free(partition); + return 0; ++ } + bool ok = ped_disk_add_partition (disk, part, constraint_exact); + ped_constraint_destroy (constraint_exact); + if (!ok) { +-- +2.27.0 + diff --git a/0006-scsi_get_product_info-fix-memleak-and-avoid-to-use-N.patch b/0006-scsi_get_product_info-fix-memleak-and-avoid-to-use-N.patch new file mode 100644 index 0000000000000000000000000000000000000000..0b0c1fcc0aa3052fb179673ada32941736f547fd --- /dev/null +++ b/0006-scsi_get_product_info-fix-memleak-and-avoid-to-use-N.patch @@ -0,0 +1,58 @@ +From 1fdae37b82d0cf16df80f648b5489f7ffd15eae1 Mon Sep 17 00:00:00 2001 +From: Li Jinlin +Date: Tue, 29 Mar 2022 11:02:38 +0800 +Subject: [PATCH 3/6] scsi_get_product_info: fix memleak and avoid to use NULL + pointer + +Need to ensure that *vendor and *product are not NULL in scsi_query_product_info() +before return 1, otherwise a null pointer may be used. + +Regardless of whether scsi_query_product_info() returns success or failed, +vendor and product should be released, otherwise there will be a memory leak + +Signed-off-by: Wu Guanghao +Signed-off-by: Li Jinlin +--- + libparted/arch/linux.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c +index 94ea176..23ec55a 100644 +--- a/libparted/arch/linux.c ++++ b/libparted/arch/linux.c +@@ -1130,7 +1130,9 @@ scsi_query_product_info (PedDevice* dev, char **vendor, char **product) + buf[16] = '\0'; + *product = strip_name (buf); + +- return 1; ++ if (*vendor && *product) ++ return 1; ++ return 0; + } + + /* This function provides the vendor and product name for a SCSI device. +@@ -1144,7 +1146,6 @@ scsi_get_product_info (PedDevice* dev, char **vendor, char **product) + *product = read_device_sysfs_file (dev, "model"); + if (*vendor && *product) + return 1; +- + return scsi_query_product_info (dev, vendor, product); + } + +@@ -1188,11 +1189,11 @@ init_scsi (PedDevice* dev) + + if (scsi_get_product_info (dev, &vendor, &product)) { + sprintf (dev->model, "%.8s %.16s", vendor, product); +- free (vendor); +- free (product); + } else { + strcpy (dev->model, "Generic SCSI"); + } ++ free (vendor); ++ free (product); + + if (!_device_probe_geometry (dev)) + goto error_close_dev; +-- +2.27.0 + diff --git a/0007-fat_op_context_new-free-ctx-remap-and-goto-correct-l.patch b/0007-fat_op_context_new-free-ctx-remap-and-goto-correct-l.patch new file mode 100644 index 0000000000000000000000000000000000000000..5442d2c9a8c3d13fbe7d8163109aaae96a0b9c01 --- /dev/null +++ b/0007-fat_op_context_new-free-ctx-remap-and-goto-correct-l.patch @@ -0,0 +1,49 @@ +From fa8544b4229e19679db070c31969c9739f702fd0 Mon Sep 17 00:00:00 2001 +From: Li Jinlin +Date: Tue, 29 Mar 2022 11:07:33 +0800 +Subject: [PATCH 4/6] fat_op_context_new: free ctx->remap and goto correct + label to avoid memleak + +When calc_deltas returns an error, need to release ctx->remap, +and eed to jump to the correct label to release ctx, otherwise +there will be memory leaks + +Signed-off-by: Wu Guanghao +Signed-off-by: Li Jinlin +--- + libparted/fs/r/fat/context.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/libparted/fs/r/fat/context.c b/libparted/fs/r/fat/context.c +index 5ca154c..fce77af 100644 +--- a/libparted/fs/r/fat/context.c ++++ b/libparted/fs/r/fat/context.c +@@ -86,9 +86,9 @@ fat_op_context_new (PedFileSystem* new_fs, PedFileSystem* old_fs) + ctx->frag_sectors = PED_MIN (old_fs_info->cluster_sectors, + new_fs_info->cluster_sectors); + if (!fat_set_frag_sectors (new_fs, ctx->frag_sectors)) +- goto error; ++ goto error_free_ctx; + if (!fat_set_frag_sectors (old_fs, ctx->frag_sectors)) +- goto error; ++ goto error_free_ctx; + + ctx->buffer_frags = old_fs_info->buffer_sectors / ctx->frag_sectors; + ctx->buffer_map = (FatFragment*) ped_malloc (sizeof (FatFragment) +@@ -104,10 +104,12 @@ fat_op_context_new (PedFileSystem* new_fs, PedFileSystem* old_fs) + ctx->new_fs = new_fs; + ctx->old_fs = old_fs; + if (!calc_deltas (ctx)) +- goto error_free_buffer_map; ++ goto error_free_remap; + + return ctx; + ++error_free_remap: ++ free(ctx->remap); + error_free_buffer_map: + free (ctx->buffer_map); + error_free_ctx: +-- +2.27.0 + diff --git a/0008-hfsplus_cache_from_extent-fix-memleak.patch b/0008-hfsplus_cache_from_extent-fix-memleak.patch new file mode 100644 index 0000000000000000000000000000000000000000..8e550fcef49cb142929a80ef4d67f27e8e5309bd --- /dev/null +++ b/0008-hfsplus_cache_from_extent-fix-memleak.patch @@ -0,0 +1,32 @@ +From ab6fde7a74ae90446a1ae88da82fee572a8a0466 Mon Sep 17 00:00:00 2001 +From: Li Jinlin +Date: Tue, 29 Mar 2022 11:08:46 +0800 +Subject: [PATCH 5/6] hfsplus_cache_from_extent: fix memleak + +Need to release node when an error occurs + +Signed-off-by: Wu Guanghao +Signed-off-by: Li Jinlin +--- + libparted/fs/r/hfs/reloc_plus.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/libparted/fs/r/hfs/reloc_plus.c b/libparted/fs/r/hfs/reloc_plus.c +index f065406..44e3490 100644 +--- a/libparted/fs/r/hfs/reloc_plus.c ++++ b/libparted/fs/r/hfs/reloc_plus.c +@@ -670,8 +670,10 @@ hfsplus_cache_from_extent(HfsCPrivateCache* cache, PedFileSystem* fs, + _("The extents overflow file should not" + " contain its own extents! You should " + "check the file system.")) +- != PED_EXCEPTION_IGNORE) ++ != PED_EXCEPTION_IGNORE) { ++ free(node); + return 0; ++ } + where = CR_BTREE_EXT_EXT; + break; + case PED_CPU_TO_BE32 (HFS_CATALOG_ID) : +-- +2.27.0 + diff --git a/0009-fat_clobber-set-boot_sector-NULL-and-free-boot_secto.patch b/0009-fat_clobber-set-boot_sector-NULL-and-free-boot_secto.patch new file mode 100644 index 0000000000000000000000000000000000000000..cb34fd4fa7e6e22b0fe15a30921d9b3ef337ad77 --- /dev/null +++ b/0009-fat_clobber-set-boot_sector-NULL-and-free-boot_secto.patch @@ -0,0 +1,38 @@ +From 1512dc33b36ad0feff9dbdcfe38e6d2acdcb38a0 Mon Sep 17 00:00:00 2001 +From: Li Jinlin +Date: Tue, 29 Mar 2022 11:10:19 +0800 +Subject: [PATCH 6/6] fat_clobber: set boot_sector = NULL and free boot_sector + after failed of fat_boot_sector_read + +When fat_boot_sector_read() returns failure, boot_sector may have +allocated memory, and memory leak will occur + +Signed-off-by: Wu Guanghao +Signed-off-by: Li Jinlin +--- + libparted/fs/r/fat/fat.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/libparted/fs/r/fat/fat.c b/libparted/fs/r/fat/fat.c +index 396494a..33a4284 100644 +--- a/libparted/fs/r/fat/fat.c ++++ b/libparted/fs/r/fat/fat.c +@@ -117,11 +117,13 @@ fat_set_frag_sectors (PedFileSystem* fs, PedSector frag_sectors) + int + fat_clobber (PedGeometry* geom) + { +- FatBootSector *boot_sector; ++ FatBootSector *boot_sector = NULL; + int ok; + +- if (!fat_boot_sector_read (&boot_sector, geom)) ++ if (!fat_boot_sector_read (&boot_sector, geom)) { ++ free(boot_sector); + return 1; ++ } + + boot_sector->system_id[0] = 0; + boot_sector->boot_sign = 0; +-- +2.27.0 + diff --git a/0010-parted-remove-patch-which-modifid-cyl-size.patch b/0010-parted-remove-patch-which-modifid-cyl-size.patch new file mode 100644 index 0000000000000000000000000000000000000000..5888f1a11f8aee0d673dac9347287eb266e060df --- /dev/null +++ b/0010-parted-remove-patch-which-modifid-cyl-size.patch @@ -0,0 +1,88 @@ +From bfce75fd13dd72c6300f0ac3d739e40df90f7dce Mon Sep 17 00:00:00 2001 +From: lixiaokeng +Date: Sun, 7 Jun 2020 15:18:00 +0000 +Subject: [PATCH] parted: remove patch which modified cyl size + +The cyl size was changed which leaded to "parted /dev/sdb -s mkpart primary 0cyl 128cyl" +could not perform as expected. Remove the patch "Use BLKSSZGET to get device sector size +in _device_probe_geometry()". + +Signed-off-by:lixiaokeng +--- + linux.c | 52 ++++++++++++++++++---------------------------------- + 1 file changed, 18 insertions(+), 34 deletions(-) + +diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c +index 37cf555..0d8149d 100644 +--- a/libparted/arch/linux.c ++++ b/libparted/arch/linux.c +@@ -868,7 +868,6 @@ _device_probe_geometry (PedDevice* dev) + struct stat dev_stat; + struct hd_geometry geometry; + int geometry_is_valid = 0; +- int sector_size = 0; + + if (!_device_stat (dev, &dev_stat)) + return 0; +@@ -880,41 +879,26 @@ _device_probe_geometry (PedDevice* dev) + if (!dev->length) + return 0; + +- /* initialize the bios_geom values to something */ +- dev->bios_geom.sectors = 0; +- dev->bios_geom.heads = 0; +- dev->bios_geom.cylinders = 0; +- +- geometry_is_valid = !ioctl (arch_specific->fd, HDIO_GETGEO, &geometry) +- && geometry.sectors && geometry.heads; +- +-#if defined __s390__ || defined __s390x__ +- if (geometry_is_valid) { +-#else +- if (!ioctl (arch_specific->fd, BLKSSZGET, §or_size)) { +- /* get the sector count first */ +- dev->bios_geom.sectors = 1 + (sector_size / PED_SECTOR_SIZE_DEFAULT); +- dev->bios_geom.heads = 255; +- } else if (geometry_is_valid) { +- /* if BLKSSZGET failed, use deprecated HDIO_GETGEO result */ +-#endif +- dev->bios_geom.sectors = geometry.sectors; +- dev->bios_geom.heads = geometry.heads; ++ /* The GETGEO ioctl is no longer useful (as of linux 2.6.x). We could ++ * still use it in 2.4.x, but this is contentious. Perhaps we should ++ * move to EDD. */ ++ dev->bios_geom.sectors = 63; ++ dev->bios_geom.heads = 255; ++ dev->bios_geom.cylinders ++ = dev->length / (63 * 255); ++ ++ /* FIXME: what should we put here? (TODO: discuss on linux-kernel) */ ++ if (!ioctl (arch_specific->fd, HDIO_GETGEO, &geometry) ++ && geometry.sectors && geometry.heads) { ++ dev->hw_geom.sectors = geometry.sectors; ++ dev->hw_geom.heads = geometry.heads; ++ dev->hw_geom.cylinders ++ = dev->length / (dev->hw_geom.heads ++ * dev->hw_geom.sectors); + } else { +- ped_exception_throw ( +- PED_EXCEPTION_WARNING, +- PED_EXCEPTION_OK, +- _("Could not determine sector size for %s: %s.\n" +- "Using the default sector size (%lld)."), +- dev->path, strerror (errno), PED_SECTOR_SIZE_DEFAULT); +- dev->bios_geom.sectors = 2; +- dev->bios_geom.heads = 255; ++ dev->hw_geom = dev->bios_geom; + } + +- dev->bios_geom.cylinders +- = dev->length / (dev->bios_geom.heads +- * dev->bios_geom.sectors); +- dev->hw_geom = dev->bios_geom; + return 1; + } + +-- +1.8.3.1 + diff --git a/0011-libparted-Fix-potential-NULL-dereference-in-ped_disk.patch b/0011-libparted-Fix-potential-NULL-dereference-in-ped_disk.patch new file mode 100644 index 0000000000000000000000000000000000000000..7fde5a897b5386ae1bc207cecb83c0420dd25509 --- /dev/null +++ b/0011-libparted-Fix-potential-NULL-dereference-in-ped_disk.patch @@ -0,0 +1,30 @@ +From 31db44c74a96f8e2b495205d18525449e9b29543 Mon Sep 17 00:00:00 2001 +From: "Brian C. Lane" +Date: Wed, 15 Feb 2023 10:13:58 -0800 +Subject: [PATCH 19/24] libparted: Fix potential NULL dereference in + ped_disk_next_partition + +--- + libparted/disk.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/libparted/disk.c b/libparted/disk.c +index 345b9e7..8eba2c2 100644 +--- a/libparted/disk.c ++++ b/libparted/disk.c +@@ -1552,8 +1552,11 @@ ped_disk_next_partition (const PedDisk* disk, const PedPartition* part) + return part->part_list ? part->part_list : part->next; + if (part->next) + return part->next; +- if (part->type & PED_PARTITION_LOGICAL) ++ if (part->type & PED_PARTITION_LOGICAL) { ++ if (!ped_disk_extended_partition (disk)) ++ return NULL; + return ped_disk_extended_partition (disk)->next; ++ } + return NULL; + } + +-- +2.33.0 + diff --git a/parted.spec b/parted.spec index 14a9070c315e98d4b47c658a9fa770aa51738b65..3ec7e14d58ee4ef30e65790bc6d41f0a011f76fa 100644 --- a/parted.spec +++ b/parted.spec @@ -14,7 +14,7 @@ Summary: The GNU disk partition manipulation program Name: parted Version: 3.4 -Release: 4 +Release: 5 URL: https://www.gnu.org/software/parted/ Source0: ftp://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz License: GPLv3+ @@ -28,6 +28,14 @@ BuildRequires: glibc-all-langpacks Patch1: 0001-add-support-of-gpt_sync_mbr.patch Patch2: 0002-Add-extra-judgment-for-a-partition-created-success.patch Patch3: 0003-bugfix-parted-fix-failure-of-mklabel-gpt_sync_mbr.patch +Patch4: 0004-hfsplus_btree_search-free-node-when-hfsplus_file_rea.patch +Patch5: 0005-amiga_read-need-free-part-and-partition-when-constra.patch +Patch6: 0006-scsi_get_product_info-fix-memleak-and-avoid-to-use-N.patch +Patch7: 0007-fat_op_context_new-free-ctx-remap-and-goto-correct-l.patch +Patch8: 0008-hfsplus_cache_from_extent-fix-memleak.patch +Patch9: 0009-fat_clobber-set-boot_sector-NULL-and-free-boot_secto.patch +Patch10:0010-parted-remove-patch-which-modifid-cyl-size.patch +Patch11:0011-libparted-Fix-potential-NULL-dereference-in-ped_disk.patch %description The GNU Parted program allows you to create, destroy, resize, move, @@ -112,6 +120,9 @@ fi %{_libdir}/pkgconfig/libparted*.pc %changelog +* Sun Apr 7 2024 volcanodragon 3.4-5 +- sync bugfix patches form 22.03-LTS + * Mon Apr 18 2022 wulei 3.4-4 - Fix en_US.utf-8 no such file or directory, and disable root for build