tree 99ae91efcc90ead7b8aa1cc44f286a528adc6545
parent 251c8427c9c418674fc3c04a11de95dc3661b560
author Anton Altaparmakov <[EMAIL PROTECTED]> Mon, 04 Apr 2005 16:20:14 +0100
committer Anton Altaparmakov <[EMAIL PROTECTED]> Thu, 05 May 2005 11:44:41 +0100

NTFS: Some utilities modify the boot sector but do not update the checksum.
      Thus, relax the checking in fs/ntfs/super.c::is_boot_sector_ntfs() to
      only emit a warning when the checksum is incorrect rather than
      refusing the mount.  Thanks to Bernd Casimir for pointing this
      problem out.

Signed-off-by: Anton Altaparmakov <[EMAIL PROTECTED]>

 fs/ntfs/ChangeLog |    5 +++++
 fs/ntfs/super.c   |   12 ++++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/fs/ntfs/ChangeLog b/fs/ntfs/ChangeLog
--- a/fs/ntfs/ChangeLog
+++ b/fs/ntfs/ChangeLog
@@ -105,6 +105,11 @@ ToDo/Notes:
          non-resident by a concurrent file write.
        - Remove checks for NULL before calling kfree() since kfree() does the
          checking itself.  (Jesper Juhl)
+       - Some utilities modify the boot sector but do not update the checksum.
+         Thus, relax the checking in fs/ntfs/super.c::is_boot_sector_ntfs() to
+         only emit a warning when the checksum is incorrect rather than
+         refusing the mount.  Thanks to Bernd Casimir for pointing this
+         problem out.
 
 2.1.22 - Many bug and race fixes and error handling improvements.
 
diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c
--- a/fs/ntfs/super.c
+++ b/fs/ntfs/super.c
@@ -38,6 +38,7 @@
 #include "debug.h"
 #include "index.h"
 #include "aops.h"
+#include "layout.h"
 #include "malloc.h"
 #include "ntfs.h"
 
@@ -532,16 +533,19 @@ static BOOL is_boot_sector_ntfs(const st
 {
        /*
         * Check that checksum == sum of u32 values from b to the checksum
-        * field. If checksum is zero, no checking is done.
+        * field.  If checksum is zero, no checking is done.  We will work when
+        * the checksum test fails, since some utilities update the boot sector
+        * ignoring the checksum which leaves the checksum out-of-date.  We
+        * report a warning if this is the case.
         */
-       if ((void*)b < (void*)&b->checksum && b->checksum) {
+       if ((void*)b < (void*)&b->checksum && b->checksum && !silent) {
                le32 *u;
                u32 i;
 
                for (i = 0, u = (le32*)b; u < (le32*)(&b->checksum); ++u)
                        i += le32_to_cpup(u);
                if (le32_to_cpu(b->checksum) != i)
-                       goto not_ntfs;
+                       ntfs_warning(sb, "Invalid boot sector checksum.");
        }
        /* Check OEMidentifier is "NTFS    " */
        if (b->oem_id != magicNTFS)
@@ -591,7 +595,7 @@ static BOOL is_boot_sector_ntfs(const st
         * many BIOSes will refuse to boot from a bootsector if the magic is
         * incorrect, so we emit a warning.
         */
-       if (!silent && b->end_of_sector_marker != cpu_to_le16(0xaa55))
+       if (!silent && b->end_of_sector_marker != const_cpu_to_le16(0xaa55))
                ntfs_warning(sb, "Invalid end of sector marker.");
        return TRUE;
 not_ntfs:
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to