Fix for ntfsclone crash (RHBZ#1601146).

epel9
Richard W.M. Jones 7 years ago
parent 9812834c42
commit b581507257

@ -16,7 +16,7 @@
Name: ntfs-3g Name: ntfs-3g
Summary: Linux NTFS userspace driver Summary: Linux NTFS userspace driver
Version: 2017.3.23 Version: 2017.3.23
Release: 7%{?dist} Release: 8%{?dist}
License: GPLv2+ License: GPLv2+
Group: System Environment/Base Group: System Environment/Base
Source0: http://tuxera.com/opensource/%%{name}_ntfsprogs-%%{version}%%{?subver}.tgz Source0: http://tuxera.com/opensource/%%{name}_ntfsprogs-%%{version}%%{?subver}.tgz
@ -38,6 +38,10 @@ Provides: fuse-ntfs-3g = %{epoch}:%{version}-%{release}
Patch0: ntfs-3g_ntfsprogs-2011.10.9-RC-ntfsck-unsupported-return-0.patch Patch0: ntfs-3g_ntfsprogs-2011.10.9-RC-ntfsck-unsupported-return-0.patch
Patch1: check-mftmirr.patch Patch1: check-mftmirr.patch
Patch2: ntfs-3g-big-sectors.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
%description %description
NTFS-3G is a stable, open source, GPL licensed, POSIX, read/write NTFS NTFS-3G is a stable, open source, GPL licensed, POSIX, read/write NTFS
@ -85,6 +89,7 @@ included utilities see man 8 ntfsprogs after installation).
%patch0 -p1 -b .unsupported %patch0 -p1 -b .unsupported
%patch1 -p0 -b .check-mftmirr %patch1 -p0 -b .check-mftmirr
%patch2 -p0 -b .big-sectors %patch2 -p0 -b .big-sectors
%patch3 -p0 -b .ntfsclone
%build %build
CFLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64" CFLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64"
@ -293,6 +298,9 @@ cp -a %{SOURCE1} %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/
%exclude %{_mandir}/man8/ntfs-3g* %exclude %{_mandir}/man8/ntfs-3g*
%changelog %changelog
* Mon Jul 16 2018 Richard W.M. Jones <rjones@redhat.com> - 2:2017.3.23-8
- Fix for ntfsclone crash (RHBZ#1601146).
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2:2017.3.23-7 * Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2:2017.3.23-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild

@ -0,0 +1,81 @@
--- 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");
Loading…
Cancel
Save