diff --git a/ntfs-3g-4d0b9163c9ef1f0cdbbf533317b291220c7fd1c7.patch b/ntfs-3g-4d0b9163c9ef1f0cdbbf533317b291220c7fd1c7.patch new file mode 100644 index 0000000..ec1a762 --- /dev/null +++ b/ntfs-3g-4d0b9163c9ef1f0cdbbf533317b291220c7fd1c7.patch @@ -0,0 +1,42 @@ +From 4d0b9163c9ef1f0cdbbf533317b291220c7fd1c7 Mon Sep 17 00:00:00 2001 +From: =?utf8?q?Jean-Pierre=20Andr=C3=A9?= +Date: Wed, 12 Sep 2012 09:42:24 +0200 +Subject: [PATCH] Accepted processing restart pages v 2.0 with no warning (used by Windows 8) + +In the $LogFile, Windows 8 defines restart pages with version 2.0. +The checks designed for version 1.1 appear to apply, so accept v 2.0 +and apply the usual checks. +--- + libntfs-3g/logfile.c | 15 +++++++++------ + 1 files changed, 9 insertions(+), 6 deletions(-) + +diff --git a/libntfs-3g/logfile.c b/libntfs-3g/logfile.c +index a4f00d5..83811fa 100644 +--- a/libntfs-3g/logfile.c ++++ b/libntfs-3g/logfile.c +@@ -84,13 +84,16 @@ static BOOL ntfs_check_restart_page_header(RESTART_PAGE_HEADER *rp, s64 pos) + "position in $LogFile.\n"); + return FALSE; + } +- /* We only know how to handle version 1.1. */ +- if (sle16_to_cpu(rp->major_ver) != 1 || +- sle16_to_cpu(rp->minor_ver) != 1) { ++ /* We only know how to handle version 1.1 and 2.0. */ ++ if (((rp->major_ver != const_cpu_to_le16(1)) ++ || (rp->minor_ver != const_cpu_to_le16(1))) ++ && ((rp->major_ver != const_cpu_to_le16(2)) ++ || (rp->minor_ver != const_cpu_to_le16(0)))) { + ntfs_log_error("$LogFile version %i.%i is not " +- "supported. (This driver supports version " +- "1.1 only.)\n", (int)sle16_to_cpu(rp->major_ver), +- (int)sle16_to_cpu(rp->minor_ver)); ++ "supported.\n (This driver supports version " ++ "1.1 and 2.0 only.)\n", ++ (int)sle16_to_cpu(rp->major_ver), ++ (int)sle16_to_cpu(rp->minor_ver)); + return FALSE; + } + /* +-- +1.7.4.1 + diff --git a/ntfs-3g-559270a8f67c77a7ce51246c23d2b2837bcff0c9.patch b/ntfs-3g-559270a8f67c77a7ce51246c23d2b2837bcff0c9.patch new file mode 100644 index 0000000..9b92298 --- /dev/null +++ b/ntfs-3g-559270a8f67c77a7ce51246c23d2b2837bcff0c9.patch @@ -0,0 +1,109 @@ +diff -up ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/logfile.c.559270a8 ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/logfile.c +--- ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/logfile.c.559270a8 2012-10-04 16:14:28.439011268 -0400 ++++ ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/logfile.c 2012-10-04 16:14:28.443011272 -0400 +@@ -84,7 +84,12 @@ static BOOL ntfs_check_restart_page_head + "position in $LogFile.\n"); + return FALSE; + } +- /* We only know how to handle version 1.1 and 2.0. */ ++ /* ++ * We only know how to handle version 1.1 and 2.0, though ++ * version 2.0 is probably related to cached metadata in ++ * Windows 8, and we will refuse to mount. ++ * Nevertheless, do all the relevant checks before rejecting. ++ */ + if (((rp->major_ver != const_cpu_to_le16(1)) + || (rp->minor_ver != const_cpu_to_le16(1))) + && ((rp->major_ver != const_cpu_to_le16(2)) +diff -up ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/volume.c.559270a8 ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/volume.c +--- ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/volume.c.559270a8 2012-01-15 08:26:14.000000000 -0500 ++++ ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/volume.c 2012-10-04 16:16:55.324071714 -0400 +@@ -89,13 +89,9 @@ static const char *corrupt_volume_msg = + "for more details.\n"; + + static const char *hibernated_volume_msg = +-"The NTFS partition is hibernated. Please resume and shutdown Windows\n" +-"properly, or mount the volume read-only with the 'ro' mount option, or\n" +-"mount the volume read-write with the 'remove_hiberfile' mount option.\n" +-"For example type on the command line:\n" +-"\n" +-" mount -t ntfs-3g -o remove_hiberfile %s %s\n" +-"\n"; ++"The NTFS partition is in an unsafe state. Please resume and shutdown\n" ++"Windows fully (no hibernation or fast restarting), or mount the volume\n" ++"read-only with the 'ro' mount option.\n"; + + static const char *unclean_journal_msg = + "Write access is denied because the disk wasn't safely powered\n" +@@ -649,6 +645,24 @@ static int ntfs_volume_check_logfile(ntf + + if (!ntfs_check_logfile(na, &rp) || !ntfs_is_logfile_clean(na, rp)) + err = EOPNOTSUPP; ++ /* ++ * If the latest restart page was identified as version ++ * 2.0, then Windows may have kept a cached copy of ++ * metadata for fast restarting, and we should not mount. ++ * Hibernation will be seen the same way on a non ++ * Windows-system partition, so we have to use the same ++ * error code (EPERM). ++ * The restart page may also be identified as version 2.0 ++ * when access to the file system is terminated abruptly ++ * by unplugging or power cut, so mounting is also rejected ++ * after such an event. ++ */ ++ if (rp ++ && (rp->major_ver == const_cpu_to_le16(2)) ++ && (rp->minor_ver == const_cpu_to_le16(0))) { ++ ntfs_log_error("Metadata kept in Windows cache, refused to mount.\n"); ++ err = EPERM; ++ } + free(rp); + ntfs_attr_close(na); + out: +@@ -1200,7 +1214,8 @@ ntfs_volume *ntfs_device_mount(struct nt + ntfs_volume_check_hiberfile(vol, 1) < 0) + goto error_exit; + if (ntfs_volume_check_logfile(vol) < 0) { +- if (!(flags & MS_RECOVER)) ++ /* Always reject cached metadata for now */ ++ if (!(flags & MS_RECOVER) || (errno == EPERM)) + goto error_exit; + ntfs_log_info("The file system wasn't safely " + "closed on Windows. Fixing.\n"); +@@ -1642,6 +1657,10 @@ int ntfs_volume_error(int err) + ret = NTFS_VOLUME_CORRUPT; + break; + case EPERM: ++ /* ++ * Hibernation and fast restarting are seen the ++ * same way on a non Windows-system partition. ++ */ + ret = NTFS_VOLUME_HIBERNATED; + break; + case EOPNOTSUPP: +diff -up ntfs-3g_ntfsprogs-2012.1.15/src/ntfs-3g.8.in.559270a8 ntfs-3g_ntfsprogs-2012.1.15/src/ntfs-3g.8.in +--- ntfs-3g_ntfsprogs-2012.1.15/src/ntfs-3g.8.in.559270a8 2012-01-15 08:26:14.000000000 -0500 ++++ ntfs-3g_ntfsprogs-2012.1.15/src/ntfs-3g.8.in 2012-10-04 16:14:28.445011274 -0400 +@@ -36,6 +36,22 @@ a few differences mentioned below in rel + .PP + The \fIvolume\fR to be mounted can be either a block device or + an image file. ++.SS Windows hibernation and fast restarting ++On computers which can be dual-booted into Windows or Linux, Windows has ++to be fully shut down before booting into Linux, otherwise the NTFS file ++systems on internal disks may be left in an inconsistent state and changes ++made by Linux may be ignored by Windows. ++.P ++So, Windows may not be left in hibernation when starting Linux, in order ++to avoid inconsistencies. Moreover, the fast restart feature available on ++recent Windows systems has to be disabled. This can be achieved by issuing ++as an Administrator the Windows command which disables both ++hibernation and fast restarting : ++.RS ++.sp ++powercfg /h off ++.sp ++.RE + .SS Access Handling and Security + By default, files and directories are owned by the effective + user and group of the mounting process, and everybody has diff --git a/ntfs-3g.spec b/ntfs-3g.spec index 2578eb1..dbdac40 100644 --- a/ntfs-3g.spec +++ b/ntfs-3g.spec @@ -8,7 +8,7 @@ Name: ntfs-3g Summary: Linux NTFS userspace driver Version: 2012.1.15 -Release: 3%{?dist} +Release: 4%{?dist} License: GPLv2+ Group: System Environment/Base Source0: http://tuxera.com/opensource/%{name}_ntfsprogs-%{version}%{?subver}.tgz @@ -27,6 +27,9 @@ Obsoletes: ntfsprogs-fuse Provides: fuse-ntfs-3g = %{epoch}:%{version}-%{release} Patch0: ntfs-3g_ntfsprogs-2011.10.9-RC-ntfsck-unsupported-return-0.patch Patch1: ntfs-3g-junction-point-fix.patch +# Windows 8 safety checks +Patch2: ntfs-3g-4d0b9163c9ef1f0cdbbf533317b291220c7fd1c7.patch +Patch3: ntfs-3g-559270a8f67c77a7ce51246c23d2b2837bcff0c9.patch %description NTFS-3G is a stable, open source, GPL licensed, POSIX, read/write NTFS @@ -69,6 +72,8 @@ included utilities see man 8 ntfsprogs after installation). %setup -q -n %{name}_ntfsprogs-%{version}%{?subver} %patch0 -p1 -b .unsupported %patch1 -p1 -b .junction-fix +%patch2 -p1 -b .4d0b9163 +%patch3 -p1 -b .559270a8 %build CFLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64" @@ -170,6 +175,12 @@ cp -a %{SOURCE1} %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/ %{_mandir}/man8/ntfs[^m][^o]*.8* %changelog +* Thu Oct 4 2012 Tom Callaway - 2:2012.1.15-4 +- add patches from upstream git to add a level of safety in the case where windows 8 + leaves the NTFS filesystem in an unsafe state and Linux access could result in data loss. + Basically, with these patches, Linux will refuse to mount the ntfs partition. For the details + refer to: https://bugzilla.redhat.com/show_bug.cgi?id=859373 + * Sun Aug 19 2012 Tom Callaway - 2:2012.1.15-3 - apply upstream fix for junction points (bz849332)