From 7e5ec892cf0e394f941b1885a32e273128e6d470 Mon Sep 17 00:00:00 2001 From: Neal Gompa Date: Tue, 31 Aug 2021 16:47:45 -0400 Subject: [PATCH] Rebase to version 2021.8.22 --- CVE-2015-3202.patch | 80 ----- check-mftmirr.patch | 12 - ntfs-3g-CVE-2019-9755.patch | 46 --- ntfs-3g-big-sectors.patch | 379 ------------------------ ntfs-3g.spec | 172 ++--------- ntfsclone-full-clusters-bz1601146.patch | 81 ----- sources | 2 +- 7 files changed, 26 insertions(+), 746 deletions(-) delete mode 100644 CVE-2015-3202.patch delete mode 100644 check-mftmirr.patch delete mode 100644 ntfs-3g-CVE-2019-9755.patch delete mode 100644 ntfs-3g-big-sectors.patch delete mode 100644 ntfsclone-full-clusters-bz1601146.patch diff --git a/CVE-2015-3202.patch b/CVE-2015-3202.patch deleted file mode 100644 index 6e5cf08..0000000 --- a/CVE-2015-3202.patch +++ /dev/null @@ -1,80 +0,0 @@ ---- ntfs-3g_ntfsprogs-2015.3.14/libfuse-lite/mount_util.c.ref 2015-03-14 15:10:12.000000000 +0100 -+++ ntfs-3g_ntfsprogs-2015.3.14/libfuse-lite/mount_util.c 2015-05-18 11:02:50.330654300 +0200 -@@ -66,6 +66,7 @@ - return -1; - } - if (res == 0) { -+ char *env = NULL; - char templ[] = "/tmp/fusermountXXXXXX"; - char *tmp; - -@@ -87,8 +88,8 @@ - exit(1); - } - rmdir(tmp); -- execl("/sbin/mount", "/sbin/mount", "-F", type, "-o", opts, -- fsname, mnt, NULL); -+ execle("/sbin/mount", "/sbin/mount", "-F", type, "-o", opts, -+ fsname, mnt, NULL, &env); - fprintf(stderr, "%s: failed to execute /sbin/mount: %s\n", progname, - strerror(errno)); - exit(1); -@@ -120,9 +121,16 @@ - return -1; - } - if (res == 0) { -+ char *env = NULL; -+ - setuid(geteuid()); -- execl("/sbin/umount", "/sbin/umount", !lazy ? "-f" : NULL, mnt, -- NULL); -+ if (lazy) { -+ execle("/sbin/umount", "/sbin/umount", mnt, -+ NULL, &env); -+ } else { -+ execle("/sbin/umount", "/sbin/umount", "-f", mnt, -+ NULL, &env); -+ } - fprintf(stderr, "%s: failed to execute /sbin/umount: %s\n", progname, - strerror(errno)); - exit(1); -@@ -302,6 +310,7 @@ - return 0; - } - if (res == 0) { -+ char *env = NULL; - char templ[] = "/tmp/fusermountXXXXXX"; - char *tmp; - -@@ -325,8 +334,8 @@ - exit(1); - } - rmdir(tmp); -- execl("/bin/mount", "/bin/mount", "-i", "-f", "-t", type, "-o", opts, -- fsname, mnt, NULL); -+ execle("/bin/mount", "/bin/mount", "-i", "-f", "-t", type, "-o", opts, -+ fsname, mnt, NULL, &env); - fprintf(stderr, "%s: failed to execute /bin/mount: %s\n", progname, - strerror(errno)); - exit(1); -@@ -353,11 +362,18 @@ - return -1; - } - if (res == 0) { -+ char *env = NULL; -+ - if (setuid(geteuid())) - fprintf(stderr, "%s: failed to setuid : %s\n", progname, - strerror(errno)); -- execl("/bin/umount", "/bin/umount", "-i", mnt, lazy ? "-l" : NULL, -- NULL); -+ if (lazy) { -+ execle("/bin/umount", "/bin/umount", "-i", mnt, "-l", -+ NULL, &env); -+ } else { -+ execle("/bin/umount", "/bin/umount", "-i", mnt, -+ NULL, &env); -+ } - fprintf(stderr, "%s: failed to execute /bin/umount: %s\n", progname, - strerror(errno)); - exit(1); diff --git a/check-mftmirr.patch b/check-mftmirr.patch deleted file mode 100644 index 666b244..0000000 --- a/check-mftmirr.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- libntfs-3g/volume.c.ref 2017-03-23 10:42:44.000000000 +0100 -+++ libntfs-3g/volume.c 2017-12-20 08:11:51.842424300 +0100 -@@ -959,7 +959,8 @@ - vol->mftmirr_size = l; - } - ntfs_log_debug("Comparing $MFTMirr to $MFT...\n"); -- for (i = 0; i < vol->mftmirr_size; ++i) { -+ /* Windows 10 does not update the full $MFTMirr any more */ -+ for (i = 0; (i < vol->mftmirr_size) && (i < FILE_first_user); ++i) { - MFT_RECORD *mrec, *mrec2; - const char *ESTR[12] = { "$MFT", "$MFTMirr", "$LogFile", - "$Volume", "$AttrDef", "root directory", "$Bitmap", diff --git a/ntfs-3g-CVE-2019-9755.patch b/ntfs-3g-CVE-2019-9755.patch deleted file mode 100644 index d54f7e1..0000000 --- a/ntfs-3g-CVE-2019-9755.patch +++ /dev/null @@ -1,46 +0,0 @@ -diff -up ntfs-3g_ntfsprogs-2017.3.23/src/lowntfs-3g.c.CVE-2019-9755 ntfs-3g_ntfsprogs-2017.3.23/src/lowntfs-3g.c ---- ntfs-3g_ntfsprogs-2017.3.23/src/lowntfs-3g.c.CVE-2019-9755 2019-03-29 16:08:22.359920075 -0400 -+++ ntfs-3g_ntfsprogs-2017.3.23/src/lowntfs-3g.c 2019-03-29 16:08:28.237794169 -0400 -@@ -4323,7 +4323,8 @@ int main(int argc, char *argv[]) - else { - ctx->abs_mnt_point = (char*)ntfs_malloc(PATH_MAX); - if (ctx->abs_mnt_point) { -- if (getcwd(ctx->abs_mnt_point, -+ if ((strlen(opts.mnt_point) < PATH_MAX) -+ && getcwd(ctx->abs_mnt_point, - PATH_MAX - strlen(opts.mnt_point) - 1)) { - strcat(ctx->abs_mnt_point, "/"); - strcat(ctx->abs_mnt_point, opts.mnt_point); -@@ -4331,6 +4332,9 @@ int main(int argc, char *argv[]) - /* Solaris also wants the absolute mount point */ - opts.mnt_point = ctx->abs_mnt_point; - #endif /* defined(__sun) && defined (__SVR4) */ -+ } else { -+ free(ctx->abs_mnt_point); -+ ctx->abs_mnt_point = (char*)NULL; - } - } - } -diff -up ntfs-3g_ntfsprogs-2017.3.23/src/ntfs-3g.c.CVE-2019-9755 ntfs-3g_ntfsprogs-2017.3.23/src/ntfs-3g.c ---- ntfs-3g_ntfsprogs-2017.3.23/src/ntfs-3g.c.CVE-2019-9755 2019-03-29 16:08:54.691227528 -0400 -+++ ntfs-3g_ntfsprogs-2017.3.23/src/ntfs-3g.c 2019-03-29 16:09:40.362249397 -0400 -@@ -4123,7 +4123,8 @@ int main(int argc, char *argv[]) - else { - ctx->abs_mnt_point = (char*)ntfs_malloc(PATH_MAX); - if (ctx->abs_mnt_point) { -- if (getcwd(ctx->abs_mnt_point, -+ if ((strlen(opts.mnt_point) < PATH_MAX) -+ && getcwd(ctx->abs_mnt_point, - PATH_MAX - strlen(opts.mnt_point) - 1)) { - strcat(ctx->abs_mnt_point, "/"); - strcat(ctx->abs_mnt_point, opts.mnt_point); -@@ -4131,6 +4132,9 @@ int main(int argc, char *argv[]) - /* Solaris also wants the absolute mount point */ - opts.mnt_point = ctx->abs_mnt_point; - #endif /* defined(__sun) && defined (__SVR4) */ -+ } else { -+ free(ctx->abs_mnt_point); -+ ctx->abs_mnt_point = (char*)NULL; - } - } - } diff --git a/ntfs-3g-big-sectors.patch b/ntfs-3g-big-sectors.patch deleted file mode 100644 index 1f4c9c5..0000000 --- a/ntfs-3g-big-sectors.patch +++ /dev/null @@ -1,379 +0,0 @@ ---- libntfs-3g/bootsect.c.ref 2017-03-23 10:42:44.000000000 +0100 -+++ libntfs-3g/bootsect.c 2018-05-07 09:11:13.004710800 +0200 -@@ -38,6 +38,7 @@ - #include - #endif - -+#include "param.h" - #include "compat.h" - #include "bootsect.h" - #include "debug.h" -@@ -61,6 +62,7 @@ - { - u32 i; - BOOL ret = FALSE; -+ u16 sectors_per_cluster; - - ntfs_log_debug("Beginning bootsector check.\n"); - -@@ -83,15 +85,27 @@ - case 1: case 2: case 4: case 8: case 16: case 32: case 64: case 128: - break; - default: -- ntfs_log_error("Unexpected sectors per cluster value (%d).\n", -- b->bpb.sectors_per_cluster); -- goto not_ntfs; -+ if ((b->bpb.sectors_per_cluster < 240) -+ || (b->bpb.sectors_per_cluster > 249)) { -+ if (b->bpb.sectors_per_cluster > 128) -+ ntfs_log_error("Unexpected sectors" -+ " per cluster value (code 0x%x)\n", -+ b->bpb.sectors_per_cluster); -+ else -+ ntfs_log_error("Unexpected sectors" -+ " per cluster value (%d).\n", -+ b->bpb.sectors_per_cluster); -+ goto not_ntfs; -+ } - } - - ntfs_log_debug("Checking cluster size.\n"); -- i = (u32)le16_to_cpu(b->bpb.bytes_per_sector) * -- b->bpb.sectors_per_cluster; -- if (i > 65536) { -+ if (b->bpb.sectors_per_cluster > 128) -+ sectors_per_cluster = 1 << (256 - b->bpb.sectors_per_cluster); -+ else -+ sectors_per_cluster = b->bpb.sectors_per_cluster; -+ i = (u32)le16_to_cpu(b->bpb.bytes_per_sector) * sectors_per_cluster; -+ if (i > NTFS_MAX_CLUSTER_SIZE) { - ntfs_log_error("Unexpected cluster size (%d).\n", i); - goto not_ntfs; - } -@@ -171,7 +185,7 @@ - int ntfs_boot_sector_parse(ntfs_volume *vol, const NTFS_BOOT_SECTOR *bs) - { - s64 sectors; -- u8 sectors_per_cluster; -+ u16 sectors_per_cluster; - s8 c; - - /* We return -1 with errno = EINVAL on error. */ -@@ -186,7 +200,10 @@ - * below or equal the number_of_clusters) really belong in the - * ntfs_boot_sector_is_ntfs but in this way we can just do this once. - */ -- sectors_per_cluster = bs->bpb.sectors_per_cluster; -+ if (bs->bpb.sectors_per_cluster > 128) -+ sectors_per_cluster = 1 << (256 - bs->bpb.sectors_per_cluster); -+ else -+ sectors_per_cluster = bs->bpb.sectors_per_cluster; - ntfs_log_debug("SectorsPerCluster = 0x%x\n", sectors_per_cluster); - if (sectors_per_cluster & (sectors_per_cluster - 1)) { - ntfs_log_error("sectors_per_cluster (%d) is not a power of 2." ---- ntfsprogs/mkntfs.8.in.ref 2017-03-23 10:42:44.000000000 +0100 -+++ ntfsprogs/mkntfs.8.in 2018-05-07 09:11:13.014132400 +0200 -@@ -132,7 +132,7 @@ - .TP - \fB\-c\fR, \fB\-\-cluster\-size\fR BYTES - Specify the size of clusters in bytes. Valid cluster size values are powers of --two, with at least 256, and at most 65536 bytes per cluster. If omitted, -+two, with at least 256, and at most 2097152 bytes (2MB) per cluster. If omitted, - .B mkntfs - uses 4096 bytes as the default cluster size. - .sp ---- ntfsprogs/mkntfs.c.ref 2017-03-23 10:42:44.000000000 +0100 -+++ ntfsprogs/mkntfs.c 2018-05-07 09:11:13.035522300 +0200 -@@ -6,7 +6,7 @@ - * Copyright (c) 2002-2006 Szabolcs Szakacsits - * Copyright (c) 2005 Erik Sornes - * Copyright (c) 2007 Yura Pakhuchiy -- * Copyright (c) 2010-2014 Jean-Pierre Andre -+ * Copyright (c) 2010-2018 Jean-Pierre Andre - * - * This utility will create an NTFS 1.2 or 3.1 volume on a user - * specified (block) device. -@@ -119,6 +119,7 @@ - # endif - #endif - -+#include "param.h" - #include "security.h" - #include "types.h" - #include "attrib.h" -@@ -287,7 +288,7 @@ - ntfs_log_info("Copyright (c) 2002-2006 Szabolcs Szakacsits\n"); - ntfs_log_info("Copyright (c) 2005 Erik Sornes\n"); - ntfs_log_info("Copyright (c) 2007 Yura Pakhuchiy\n"); -- ntfs_log_info("Copyright (c) 2010-2014 Jean-Pierre Andre\n"); -+ ntfs_log_info("Copyright (c) 2010-2018 Jean-Pierre Andre\n"); - ntfs_log_info("\n%s\n%s%s\n", ntfs_gpl, ntfs_bugs, ntfs_home); - } - -@@ -3719,11 +3720,11 @@ - /* - * For huge volumes, grow the cluster size until the number of - * clusters fits into 32 bits or the cluster size exceeds the -- * maximum limit of 64kiB. -+ * maximum limit of NTFS_MAX_CLUSTER_SIZE. - */ - while (volume_size >> (ffs(vol->cluster_size) - 1 + 32)) { - vol->cluster_size <<= 1; -- if (vol->cluster_size > 65535) { -+ if (vol->cluster_size >= NTFS_MAX_CLUSTER_SIZE) { - ntfs_log_error("Device is too large to hold an " - "NTFS volume (maximum size is " - "256TiB).\n"); -@@ -3744,15 +3745,18 @@ - "to, or larger than, the sector size.\n"); - return FALSE; - } -- if (vol->cluster_size > 128 * (u32)opts.sector_size) { -+ /* Before Windows 10 Creators, the limit was 128 */ -+ if (vol->cluster_size > 4096 * (u32)opts.sector_size) { - ntfs_log_error("The cluster size is invalid. It cannot be " -- "more that 128 times the size of the sector " -+ "more that 4096 times the size of the sector " - "size.\n"); - return FALSE; - } -- if (vol->cluster_size > 65536) { -+ if (vol->cluster_size > NTFS_MAX_CLUSTER_SIZE) { - ntfs_log_error("The cluster size is invalid. The maximum " -- "cluster size is 65536 bytes (64kiB).\n"); -+ "cluster size is %lu bytes (%lukiB).\n", -+ (unsigned long)NTFS_MAX_CLUSTER_SIZE, -+ (unsigned long)(NTFS_MAX_CLUSTER_SIZE >> 10)); - return FALSE; - } - vol->cluster_size_bits = ffs(vol->cluster_size) - 1; -@@ -4387,6 +4391,7 @@ - u8 *sd; - FILE_ATTR_FLAGS extend_flags; - VOLUME_FLAGS volume_flags = const_cpu_to_le16(0); -+ int sectors_per_cluster; - int nr_sysfiles; - int buf_sds_first_size; - char *buf_sds; -@@ -4639,8 +4644,11 @@ - * already inserted, so no need to worry about these things. - */ - bs->bpb.bytes_per_sector = cpu_to_le16(opts.sector_size); -- bs->bpb.sectors_per_cluster = (u8)(g_vol->cluster_size / -- opts.sector_size); -+ sectors_per_cluster = g_vol->cluster_size / opts.sector_size; -+ if (sectors_per_cluster > 128) -+ bs->bpb.sectors_per_cluster = 257 - ffs(sectors_per_cluster); -+ else -+ bs->bpb.sectors_per_cluster = sectors_per_cluster; - bs->bpb.media_type = 0xf8; /* hard disk */ - bs->bpb.sectors_per_track = cpu_to_le16(opts.sectors_per_track); - ntfs_log_debug("sectors per track = %ld (0x%lx)\n", ---- ntfsprogs/ntfsclone.c.ref 2017-03-23 10:42:44.000000000 +0100 -+++ ntfsprogs/ntfsclone.c 2018-05-07 09:11:38.245007100 +0200 -@@ -3,7 +3,7 @@ - * - * Copyright (c) 2003-2006 Szabolcs Szakacsits - * Copyright (c) 2004-2006 Anton Altaparmakov -- * Copyright (c) 2010-2016 Jean-Pierre Andre -+ * Copyright (c) 2010-2018 Jean-Pierre Andre - * Special image format support copyright (c) 2004 Per Olofsson - * - * Clone NTFS data and/or metadata to a sparse file, image, device or stdout. -@@ -71,6 +71,7 @@ - */ - #define NTFS_DO_NOT_CHECK_ENDIANS - -+#include "param.h" - #include "debug.h" - #include "types.h" - #include "support.h" -@@ -270,7 +271,6 @@ - - #define LAST_METADATA_INODE 11 - --#define NTFS_MAX_CLUSTER_SIZE 65536 - #define NTFS_SECTOR_SIZE 512 - - #define rounded_up_division(a, b) (((a) + (b - 1)) / (b)) -@@ -393,7 +393,7 @@ - "Efficiently clone, image, restore or rescue an NTFS Volume.\n\n" - "Copyright (c) 2003-2006 Szabolcs Szakacsits\n" - "Copyright (c) 2004-2006 Anton Altaparmakov\n" -- "Copyright (c) 2010-2016 Jean-Pierre Andre\n\n"); -+ "Copyright (c) 2010-2018 Jean-Pierre Andre\n\n"); - fprintf(stderr, "%s\n%s%s", ntfs_gpl, ntfs_bugs, ntfs_home); - exit(0); - } -@@ -756,7 +756,7 @@ - - static void copy_cluster(int rescue, u64 rescue_lcn, u64 lcn) - { -- char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */ -+ char *buff; - /* vol is NULL if opt.restore_image is set */ - s32 csize = le32_to_cpu(image_hdr.cluster_size); - BOOL backup_bootsector; -@@ -783,6 +783,10 @@ - } - } - -+ buff = (char*)ntfs_malloc(csize); -+ if (!buff) -+ err_exit("Not enough memory"); -+ - // need reading when not about to write ? - if (read_all(fd, buff, csize) == -1) { - -@@ -858,6 +862,7 @@ - perr_printf("Write failed"); - #endif - } -+ free(buff); - } - - static s64 lseek_out(int fd, s64 pos, int mode) -@@ -995,7 +1000,11 @@ - struct progress_bar *progress, u64 *p_counter) - { - s64 i; -- char buff[NTFS_MAX_CLUSTER_SIZE]; -+ char *buff; -+ -+ buff = (char*)ntfs_malloc(csize); -+ if (!buff) -+ err_exit("Not enough memory"); - - memset(buff, 0, csize); - -@@ -1004,6 +1013,7 @@ - perr_exit("write_all"); - progress_update(progress, ++(*p_counter)); - } -+ free(buff); - } - - static void restore_image(void) -@@ -1492,7 +1502,7 @@ - - static void copy_wipe_mft(ntfs_walk_clusters_ctx *image, runlist *rl) - { -- char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */ -+ char *buff; - void *fd; - s64 mft_no; - u32 mft_record_size; -@@ -1522,6 +1532,10 @@ - clusters_per_set = mft_record_size/csize; - records_per_set = 1; - } -+ buff = (char*)ntfs_malloc(mft_record_size); -+ if (!buff) -+ err_exit("Not enough memory"); -+ - mft_no = 0; - ri = rj = 0; - wi = wj = 0; -@@ -1554,6 +1568,7 @@ - } - } - image->current_lcn = current_lcn; -+ free(buff); - } - - /* -@@ -1566,7 +1581,7 @@ - - static void copy_wipe_i30(ntfs_walk_clusters_ctx *image, runlist *rl) - { -- char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */ -+ char *buff; - void *fd; - u32 indx_record_size; - u32 csize; -@@ -1595,6 +1610,10 @@ - clusters_per_set = indx_record_size/csize; - records_per_set = 1; - } -+ buff = (char*)ntfs_malloc(indx_record_size); -+ if (!buff) -+ err_exit("Not enough memory"); -+ - ri = rj = 0; - wi = wj = 0; - if (rl[ri].length) -@@ -1627,6 +1646,7 @@ - } - } - image->current_lcn = current_lcn; -+ free(buff); - } - - static void dump_clusters(ntfs_walk_clusters_ctx *image, runlist *rl) ---- ntfsprogs/ntfsresize.c.ref 2017-03-23 10:42:44.000000000 +0100 -+++ ntfsprogs/ntfsresize.c 2018-05-07 09:11:13.076883400 +0200 -@@ -59,6 +59,7 @@ - #include - #endif - -+#include "param.h" - #include "debug.h" - #include "types.h" - #include "support.h" -@@ -243,8 +244,6 @@ - #define DIRTY_INODE (1) - #define DIRTY_ATTRIB (2) - --#define NTFS_MAX_CLUSTER_SIZE (65536) -- - static s64 rounded_up_division(s64 numer, s64 denom) - { - return (numer + (denom - 1)) / denom; -@@ -404,7 +403,7 @@ - printf("Copyright (c) 2002-2005 Anton Altaparmakov\n"); - printf("Copyright (c) 2002-2003 Richard Russon\n"); - printf("Copyright (c) 2007 Yura Pakhuchiy\n"); -- printf("Copyright (c) 2011-2016 Jean-Pierre Andre\n"); -+ printf("Copyright (c) 2011-2018 Jean-Pierre Andre\n"); - printf("\n%s\n%s%s", ntfs_gpl, ntfs_bugs, ntfs_home); - } - -@@ -1849,9 +1848,13 @@ - static void copy_clusters(ntfs_resize_t *resize, s64 dest, s64 src, s64 len) - { - s64 i; -- char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */ -+ char *buff; - ntfs_volume *vol = resize->vol; - -+ buff = (char*)ntfs_malloc(vol->cluster_size); -+ if (!buff) -+ perr_exit("ntfs_malloc"); -+ - for (i = 0; i < len; i++) { - - lseek_to_cluster(vol, src + i); -@@ -1875,6 +1878,7 @@ - resize->relocations++; - progress_update(&resize->progress, resize->relocations); - } -+ free(buff); - } - - static void relocate_clusters(ntfs_resize_t *r, runlist *dest_rl, s64 src_lcn) ---- include/ntfs-3g/param.h.ref 2017-03-23 10:42:44.000000000 +0100 -+++ include/ntfs-3g/param.h 2018-05-07 09:11:13.088302600 +0200 -@@ -40,6 +40,13 @@ - }; - - /* -+ * Parameters for formatting -+ */ -+ -+ /* Up to Windows 10, the cluster size was limited to 64K */ -+#define NTFS_MAX_CLUSTER_SIZE 2097152 /* Windows 10 Creators allows 2MB */ -+ -+/* - * Parameters for compression - */ - diff --git a/ntfs-3g.spec b/ntfs-3g.spec index c715148..cc630d1 100644 --- a/ntfs-3g.spec +++ b/ntfs-3g.spec @@ -5,23 +5,12 @@ # For release candidates # %%global subver -RC -%global oldrhel 0 - -%if 0%{?rhel} -%if 0%{?rhel} < 7 -%global oldrhel 1 -%endif -%endif - Name: ntfs-3g Summary: Linux NTFS userspace driver -Version: 2017.3.23 -Release: 17%{?dist} +Version: 2021.8.22 +Release: 1%{?dist} License: GPLv2+ -Source0: http://tuxera.com/opensource/%%{name}_ntfsprogs-%%{version}%%{?subver}.tgz -%if %{oldrhel} -Source1: 20-ntfs-config-write-policy.fdi -%endif +Source0: http://tuxera.com/opensource/%{name}_ntfsprogs-%{version}%{?subver}.tgz URL: https://www.tuxera.com/company/open-source/ BuildRequires: make %if %{with_externalfuse} @@ -39,25 +28,16 @@ Provides: ntfsprogs-fuse = %{epoch}:%{version}-%{release} Obsoletes: ntfsprogs-fuse Provides: fuse-ntfs-3g = %{epoch}:%{version}-%{release} Patch0: ntfs-3g_ntfsprogs-2011.10.9-RC-ntfsck-unsupported-return-0.patch -Patch1: check-mftmirr.patch -Patch2: ntfs-3g-big-sectors.patch -# Fix for ntfsclone crash. -# Discussed with upstream developer but not upstream yet, see: -# https://bugzilla.redhat.com/show_bug.cgi?id=1601146#c4 -Patch3: ntfsclone-full-clusters-bz1601146.patch -# Upstream fix for CVE-2019-9755 -# https://sourceforge.net/p/ntfs-3g/ntfs-3g/ci/85c1634a26faa572d3c558d4cf8aaaca5202d4e9/ -Patch4: ntfs-3g-CVE-2019-9755.patch %description -NTFS-3G is a stable, open source, GPL licensed, POSIX, read/write NTFS -driver for Linux and many other operating systems. It provides safe -handling of the Windows XP, Windows Server 2003, Windows 2000, Windows -Vista, Windows Server 2008 and Windows 7 NTFS file systems. NTFS-3G can -create, remove, rename, move files, directories, hard links, and streams; -it can read and write normal and transparently compressed files, including -streams and sparse files; it can handle special files like symbolic links, -devices, and FIFOs, ACL, extended attributes; moreover it provides full +NTFS-3G is a stable, open source, GPL licensed, POSIX, read/write NTFS +driver for Linux and many other operating systems. It provides safe +handling of the Windows XP, Windows Server 2003, Windows 2000, Windows +Vista, Windows Server 2008 and Windows 7 NTFS file systems. NTFS-3G can +create, remove, rename, move files, directories, hard links, and streams; +it can read and write normal and transparently compressed files, including +streams and sparse files; it can handle special files like symbolic links, +devices, and FIFOs, ACL, extended attributes; moreover it provides full file access right and ownership support. %package devel @@ -65,7 +45,7 @@ Summary: Development files and libraries for ntfs-3g Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} Requires: pkgconfig Provides: ntfsprogs-devel = %{epoch}:%{version}-%{release} -# ntfsprogs-2.0.0-17 was never built. 2.0.0-16 was the last build for that +# ntfsprogs-2.0.0-17 was never built. 2.0.0-16 was the last build for that # standalone package. Obsoletes: ntfsprogs-devel < 2.0.0-17 @@ -79,22 +59,18 @@ Summary: NTFS filesystem libraries and utilities Provides: ntfsprogs-gnomevfs = %{epoch}:%{version}-%{release} Obsoletes: ntfsprogs-gnomevfs # Needed to fix multilib issue -# ntfsprogs-2.0.0-17 was never built. 2.0.0-16 was the last build for that +# ntfsprogs-2.0.0-17 was never built. 2.0.0-16 was the last build for that # standalone package. Obsoletes: ntfsprogs < 2.0.0-17 %description -n ntfsprogs -The ntfsprogs package currently consists of a library and utilities such as -mkntfs, ntfscat, ntfsls, ntfsresize, and ntfsundelete (for a full list of +The ntfsprogs package currently consists of a library and utilities such as +mkntfs, ntfscat, ntfsls, ntfsresize, and ntfsundelete (for a full list of included utilities see man 8 ntfsprogs after installation). %prep -%setup -q -n %{name}_ntfsprogs-%{version}%{?subver} -%patch0 -p1 -b .unsupported -%patch1 -p0 -b .check-mftmirr -%patch2 -p0 -b .big-sectors -%patch3 -p0 -b .ntfsclone -%patch4 -p1 -b .CVE-2019-9755 +%autosetup -n %{name}_ntfsprogs-%{version}%{?subver} -p1 + %build CFLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64" @@ -105,49 +81,29 @@ CFLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64" --with-fuse=external \ %endif --exec-prefix=/ \ -%if %{oldrhel} - --bindir=/bin \ - --sbindir=/sbin \ - --libdir=/%{_lib} \ -%endif --enable-posix-acls \ --enable-xattr-mappings \ --enable-crypto \ --enable-extras \ --enable-quarantined -make %{?_smp_mflags} LIBTOOL=%{_bindir}/libtool +%make_build LIBTOOL=%{_bindir}/libtool + %install -make LIBTOOL=`which libtool` DESTDIR=%{buildroot} install -%if %{oldrhel} -rm -rf %{buildroot}/%{_lib}/*.la -rm -rf %{buildroot}/%{_lib}/*.a -%else +%make_install LIBTOOL=%{_bindir}/libtool + rm -rf %{buildroot}%{_libdir}/*.la rm -rf %{buildroot}%{_libdir}/*.a -%endif -%if %{oldrhel} -rm -rf %{buildroot}/sbin/mount.ntfs-3g -cp -a %{buildroot}/bin/ntfs-3g %{buildroot}/sbin/mount.ntfs-3g -%else rm -rf %{buildroot}/%{_sbindir}/mount.ntfs-3g cp -a %{buildroot}/%{_bindir}/ntfs-3g %{buildroot}/%{_sbindir}/mount.ntfs-3g -%endif # Actually make some symlinks for simplicity... # ... since we're obsoleting ntfsprogs-fuse -%if %{oldrhel} -pushd %{buildroot}/bin -ln -s ntfs-3g ntfsmount -popd -pushd %{buildroot}/sbin -%else pushd %{buildroot}/%{_bindir} ln -s ntfs-3g ntfsmount popd pushd %{buildroot}/%{_sbindir} -%endif ln -s mount.ntfs-3g mount.ntfs-fuse # And since there is no other package in Fedora that provides an ntfs # mount... @@ -156,98 +112,37 @@ ln -s mount.ntfs-3g mount.ntfs ln -s ../bin/ntfsck fsck.ntfs popd -%if %{oldrhel} -# Compat symlinks -mkdir -p %{buildroot}%{_bindir} -pushd %{buildroot}%{_bindir} -ln -s /bin/ntfs-3g ntfs-3g -ln -s /bin/ntfsmount ntfsmount -popd - -# Put the .pc file in the right place. -mkdir -p %{buildroot}%{_libdir}/pkgconfig/ -mv %{buildroot}/%{_lib}/pkgconfig/libntfs-3g.pc %{buildroot}%{_libdir}/pkgconfig/ -%else mv %{buildroot}/sbin/* %{buildroot}/%{_sbindir} rmdir %{buildroot}/sbin -%endif # We get this on our own, thanks. rm -rf %{buildroot}%{_defaultdocdir}/%{name}/README -%if %{oldrhel} -mkdir -p %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/ -cp -a %{SOURCE1} %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/ -%endif - %ldconfig_scriptlets %files %doc AUTHORS ChangeLog CREDITS NEWS README -%if %{oldrhel} -%doc COPYING -%else %license COPYING -%endif -%if %{oldrhel} -/sbin/mount.ntfs -/sbin/mount.ntfs-3g -/sbin/mount.ntfs-fuse -/sbin/mount.lowntfs-3g -/bin/ntfs-3g -/bin/ntfsmount -#compat symlinks -%{_bindir}/ntfs-3g -%{_bindir}/ntfsmount -%else %{_sbindir}/mount.ntfs %{_sbindir}/mount.ntfs-3g %{_sbindir}/mount.ntfs-fuse %{_sbindir}/mount.lowntfs-3g %{_bindir}/ntfs-3g %{_bindir}/ntfsmount -%endif -%if %{oldrhel} -/bin/ntfs-3g.probe -/bin/lowntfs-3g -%else %{_bindir}/ntfs-3g.probe %{_bindir}/lowntfs-3g -%endif -%if %{oldrhel} -/%{_lib}/libntfs-3g.so.* -%else %{_libdir}/libntfs-3g.so.* -%endif %{_mandir}/man8/mount.lowntfs-3g.* %{_mandir}/man8/mount.ntfs-3g.* %{_mandir}/man8/ntfs-3g* -%if %{oldrhel} -%{_datadir}/hal/fdi/policy/10osvendor/20-ntfs-config-write-policy.fdi -%endif %files devel %{_includedir}/ntfs-3g/ -%if %{oldrhel} -/%{_lib}/libntfs-3g.so -%else %{_libdir}/libntfs-3g.so -%endif %{_libdir}/pkgconfig/libntfs-3g.pc %files -n ntfsprogs %doc AUTHORS CREDITS ChangeLog NEWS README -%if %{oldrhel} -%doc COPYING -/bin/ntfscat -/bin/ntfscluster -/bin/ntfscmp -/bin/ntfsfix -/bin/ntfsinfo -/bin/ntfsls -/bin/ntfssecaudit -/bin/ntfsusermap -%else %license COPYING %{_bindir}/ntfscat %{_bindir}/ntfscluster @@ -257,27 +152,7 @@ cp -a %{SOURCE1} %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/ %{_bindir}/ntfsls %{_bindir}/ntfssecaudit %{_bindir}/ntfsusermap -%endif # Extras -%if %{oldrhel} -/bin/ntfsck -/bin/ntfsdecrypt -/bin/ntfsdump_logfile -/bin/ntfsfallocate -/bin/ntfsmftalloc -/bin/ntfsmove -/bin/ntfsrecover -/bin/ntfstruncate -/bin/ntfswipe -/sbin/fsck.ntfs -/sbin/mkfs.ntfs -/sbin/mkntfs -/sbin/ntfsclone -/sbin/ntfscp -/sbin/ntfslabel -/sbin/ntfsresize -/sbin/ntfsundelete -%else %{_bindir}/ntfsck %{_bindir}/ntfsdecrypt %{_bindir}/ntfsdump_logfile @@ -295,13 +170,16 @@ cp -a %{SOURCE1} %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/ %{_sbindir}/ntfslabel %{_sbindir}/ntfsresize %{_sbindir}/ntfsundelete -%endif %{_mandir}/man8/mkntfs.8* %{_mandir}/man8/mkfs.ntfs.8* %{_mandir}/man8/ntfs[^m][^o]*.8* %exclude %{_mandir}/man8/ntfs-3g* %changelog +* Tue Aug 31 2021 Neal Gompa - 2:2021.8.22-1 +- Rebase to version 2021.8.22 to fix various CVEs (RHBZ#1999869) +- Clean up old cruft for RHEL < 7 + * Thu Jul 22 2021 Fedora Release Engineering - 2:2017.3.23-17 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild diff --git a/ntfsclone-full-clusters-bz1601146.patch b/ntfsclone-full-clusters-bz1601146.patch deleted file mode 100644 index 1161510..0000000 --- a/ntfsclone-full-clusters-bz1601146.patch +++ /dev/null @@ -1,81 +0,0 @@ ---- ntfsprogs/ntfsclone.c 2018-05-16 18:46:47.114964000 +0200 -+++ ntfsprogs/ntfsclone.c 2018-07-16 14:03:20.273809100 +0200 -@@ -776,6 +776,10 @@ - - /* possible partial cluster holding the backup boot sector */ - backup_bootsector = (lcn + 1)*csize >= full_device_size; -+ buff = (char*)ntfs_malloc(csize); -+ if (!buff) -+ err_exit("Not enough memory"); -+ - if (backup_bootsector) { - csize = full_device_size - lcn*csize; - if (csize < 0) { -@@ -783,10 +787,6 @@ - } - } - -- buff = (char*)ntfs_malloc(csize); -- if (!buff) -- err_exit("Not enough memory"); -- - // need reading when not about to write ? - if (read_all(fd, buff, csize) == -1) { - -@@ -1507,6 +1507,7 @@ - s64 mft_no; - u32 mft_record_size; - u32 csize; -+ u32 buff_size; - u32 bytes_per_sector; - u32 records_per_set; - u32 clusters_per_set; -@@ -1524,15 +1525,18 @@ - /* - * Depending on the sizes, there may be several records - * per cluster, or several clusters per record. -+ * Anyway, full clusters are needed for rescuing bad ones. - */ - if (csize >= mft_record_size) { - records_per_set = csize/mft_record_size; - clusters_per_set = 1; -+ buff_size = csize; - } else { - clusters_per_set = mft_record_size/csize; - records_per_set = 1; -+ buff_size = mft_record_size; - } -- buff = (char*)ntfs_malloc(mft_record_size); -+ buff = (char*)ntfs_malloc(buff_size); - if (!buff) - err_exit("Not enough memory"); - -@@ -1585,6 +1589,7 @@ - void *fd; - u32 indx_record_size; - u32 csize; -+ u32 buff_size; - u32 bytes_per_sector; - u32 records_per_set; - u32 clusters_per_set; -@@ -1601,16 +1606,19 @@ - /* - * Depending on the sizes, there may be several records - * per cluster, or several clusters per record. -+ * Anyway, full clusters are needed for rescuing bad ones. - */ - indx_record_size = image->ni->vol->indx_record_size; - if (csize >= indx_record_size) { - records_per_set = csize/indx_record_size; - clusters_per_set = 1; -+ buff_size = csize; - } else { - clusters_per_set = indx_record_size/csize; - records_per_set = 1; -+ buff_size = indx_record_size; - } -- buff = (char*)ntfs_malloc(indx_record_size); -+ buff = (char*)ntfs_malloc(buff_size); - if (!buff) - err_exit("Not enough memory"); - diff --git a/sources b/sources index 4d7be77..1aad200 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ntfs-3g_ntfsprogs-2017.3.23.tgz) = 3a607f0d7be35204c992d8931de0404fbc52032c13b4240d2c5e6f285c318a28eb2a385d7cf5ac4cd445876aee5baa5753bb636ada0d870d84a9d3fdbce794ef +SHA512 (ntfs-3g_ntfsprogs-2021.8.22.tgz) = e0544df78a6c352999e1206d7b5d71c56e39396b7a0936a261d728c2ac9d61c6b95ef297f8529ac2a5146f31c1c9e43066d3e281064d4f5d781a04eba51f536d