[Top] [All Lists]

[PATCH, RFC] xfs: don't verify checksum on non-V5 superblocks

To: "'linux-xfs@xxxxxxxxxxx'" <linux-xfs@xxxxxxxxxxx>
Subject: [PATCH, RFC] xfs: don't verify checksum on non-V5 superblocks
From: Eric Sandeen <sandeen@xxxxxxxxxx>
Date: Thu, 15 Aug 2013 13:19:15 -0500
Delivered-to: linux-xfs@xxxxxxxxxxx
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130801 Thunderbird/17.0.8
The current test in xfs_sb_read_verify() will attempt to validate
an sb checksum if sb_crc is non-zero, even if the superblock is not
marked as being version 5.

This runs the risk of picking up random garbage in sb_crc for non-V5
superblocks; such garbage is known to exist in the wild due to prior bugs.
This will cause verification to fail for otherwise non-fatal reasons.

I'm not sure of the point of trying to validate a non-V5 superblock;
is there one?  Shouldn't this || be an &&?  (Can sb_crc validly be
0 for a V5 SB?)

Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>

diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
index 2b0ba35..5ca299b 100644
--- a/fs/xfs/xfs_mount.c
+++ b/fs/xfs/xfs_mount.c
@@ -764,7 +764,7 @@ xfs_sb_read_verify(
        if (dsb->sb_magicnum == cpu_to_be32(XFS_SB_MAGIC) &&
            (((be16_to_cpu(dsb->sb_versionnum) & XFS_SB_VERSION_NUMBITS) ==
-                                               XFS_SB_VERSION_5) ||
+                                               XFS_SB_VERSION_5) &&
             dsb->sb_crc != 0)) {
                if (!xfs_verify_cksum(bp->b_addr, be16_to_cpu(dsb->sb_sectsize),

<Prev in Thread] Current Thread [Next in Thread>