diff options
author | Darrick J. Wong <djwong@kernel.org> | 2023-11-20 10:31:44 -0800 |
---|---|---|
committer | Chandan Babu R <chandanbabu@kernel.org> | 2023-11-22 23:39:36 +0530 |
commit | 9c235dfc3d3f901fe22acb20f2ab37ff39f2ce02 (patch) | |
tree | d7ebcd1fb9d31728ab0cb1b0e00b653677a3ce78 | |
parent | ed17f7da5f0c8b65b7b5f7c98beb0aadbc0546ee (diff) | |
download | xfs-linux-xfs-6.7-fixes.tar.gz |
xfs: dquot recovery does not validate the recovered dquotxfs-6.7-fixes-3xfs-6.7-fixes
When we're recovering ondisk quota records from the log, we need to
validate the recovered buffer contents before writing them to disk.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
-rw-r--r-- | fs/xfs/xfs_dquot_item_recover.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/xfs/xfs_dquot_item_recover.c b/fs/xfs/xfs_dquot_item_recover.c index db2cb5e4197b9..2c2720ce69238 100644 --- a/fs/xfs/xfs_dquot_item_recover.c +++ b/fs/xfs/xfs_dquot_item_recover.c @@ -19,6 +19,7 @@ #include "xfs_log.h" #include "xfs_log_priv.h" #include "xfs_log_recover.h" +#include "xfs_error.h" STATIC void xlog_recover_dquot_ra_pass2( @@ -152,6 +153,19 @@ xlog_recover_dquot_commit_pass2( XFS_DQUOT_CRC_OFF); } + /* Validate the recovered dquot. */ + fa = xfs_dqblk_verify(log->l_mp, dqb, dq_f->qlf_id); + if (fa) { + XFS_CORRUPTION_ERROR("Bad dquot after recovery", + XFS_ERRLEVEL_LOW, mp, dqb, + sizeof(struct xfs_dqblk)); + xfs_alert(mp, + "Metadata corruption detected at %pS, dquot 0x%x", + fa, dq_f->qlf_id); + error = -EFSCORRUPTED; + goto out_release; + } + ASSERT(dq_f->qlf_size == 2); ASSERT(bp->b_mount == mp); bp->b_flags |= _XBF_LOGRECOVERY; |