]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
libxfs: readahead of dir3 data blocks should use the read verifier
authorDarrick J. Wong <darrick.wong@oracle.com>
Wed, 19 Aug 2015 00:33:58 +0000 (10:33 +1000)
committerLuis Henriques <luis.henriques@canonical.com>
Mon, 28 Sep 2015 09:21:45 +0000 (10:21 +0100)
commit 2f123bce18943fff819bc10f8868ffb9149fc622 upstream.

In the dir3 data block readahead function, use the regular read
verifier to check the block's CRC and spot-check the block contents
instead of directly calling only the spot-checking routine.  This
prevents corrupted directory data blocks from being read into the
kernel, which can lead to garbage ls output and directory loops (if
say one of the entries contains slashes and other junk).

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
[ luis: backported to 3.16:
  - file rename: fs/xfs/libxfs/xfs_dir2_data.c -> fs/xfs/xfs_dir2_data.c
  - adjusted context ]
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
fs/xfs/xfs_dir2_data.c

index 8c2f6422648ea76788a32b0a3accf755db14f000..a32a935e3800759e83220e08547489256de238fe 100644 (file)
@@ -253,7 +253,8 @@ xfs_dir3_data_reada_verify(
                return;
        case cpu_to_be32(XFS_DIR2_DATA_MAGIC):
        case cpu_to_be32(XFS_DIR3_DATA_MAGIC):
-               xfs_dir3_data_verify(bp);
+               bp->b_ops = &xfs_dir3_data_buf_ops;
+               bp->b_ops->verify_read(bp);
                return;
        default:
                xfs_buf_ioerror(bp, EFSCORRUPTED);