| From 2f123bce18943fff819bc10f8868ffb9149fc622 Mon Sep 17 00:00:00 2001 |
| From: "Darrick J. Wong" <darrick.wong@oracle.com> |
| Date: Wed, 19 Aug 2015 10:33:58 +1000 |
| Subject: libxfs: readahead of dir3 data blocks should use the read verifier |
| |
| From: "Darrick J. Wong" <darrick.wong@oracle.com> |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/xfs/libxfs/xfs_dir2_data.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/fs/xfs/libxfs/xfs_dir2_data.c |
| +++ b/fs/xfs/libxfs/xfs_dir2_data.c |
| @@ -252,7 +252,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); |