43 lines
1.5 KiB
Diff
43 lines
1.5 KiB
Diff
From b3749469112306a80925420b48a6e756b2beeed9 Mon Sep 17 00:00:00 2001
|
|
From: Dave Chinner <dchinner@redhat.com>
|
|
Date: Mon, 31 Jan 2022 15:25:48 -0500
|
|
Subject: [PATCH] xfs: sb verifier doesn't handle uncached sb buffer
|
|
|
|
Source kernel commit: 8cf07f3dd56195316be97758cb8b4e1d7183ea84
|
|
|
|
The verifier checks explicitly for bp->b_bn == XFS_SB_DADDR to match
|
|
the primary superblock buffer, but the primary superblock is an
|
|
uncached buffer and so bp->b_bn is always -1ULL. Hence this never
|
|
matches and the CRC error reporting is wholly dependent on the
|
|
mount superblock already being populated so CRC feature checks pass
|
|
and allow CRC errors to be reported.
|
|
|
|
Fix this so that the primary superblock CRC error reporting is not
|
|
dependent on already having read the superblock into memory.
|
|
|
|
Signed-off-by: Dave Chinner <dchinner@redhat.com>
|
|
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
|
|
Reviewed-by: Christoph Hellwig <hch@lst.de>
|
|
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
|
|
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
|
|
---
|
|
libxfs/xfs_sb.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/libxfs/xfs_sb.c b/libxfs/xfs_sb.c
|
|
index b2e214e..f29a59a 100644
|
|
--- a/libxfs/xfs_sb.c
|
|
+++ b/libxfs/xfs_sb.c
|
|
@@ -634,7 +634,7 @@ xfs_sb_read_verify(
|
|
|
|
if (!xfs_buf_verify_cksum(bp, XFS_SB_CRC_OFF)) {
|
|
/* Only fail bad secondaries on a known V5 filesystem */
|
|
- if (bp->b_bn == XFS_SB_DADDR ||
|
|
+ if (bp->b_maps[0].bm_bn == XFS_SB_DADDR ||
|
|
xfs_sb_version_hascrc(&mp->m_sb)) {
|
|
error = -EFSBADCRC;
|
|
goto out_error;
|
|
--
|
|
1.8.3.1
|
|
|