diff options
author | Dave Chinner <dchinner@redhat.com> | 2024-02-15 09:27:54 +0100 |
---|---|---|
committer | Carlos Maiolino <cem@kernel.org> | 2024-02-15 12:56:43 +0100 |
commit | 53d96fc6b19415dfe1dedcf95099b3333ae4fe92 (patch) | |
tree | 0001ba20e2411e57d824cd2062772f91ef22499b | |
parent | 8fdde9dd48edc32a2f5e5a061a12e8dad54c3c7e (diff) | |
download | xfsprogs-dev-53d96fc6b19415dfe1dedcf95099b3333ae4fe92.tar.gz |
xfs: inode recovery does not validate the recovered inode
Source kernel commit: 038ca189c0d2c1570b4d922f25b524007c85cf94
Discovered when trying to track down a weird recovery corruption
issue that wasn't detected at recovery time.
The specific corruption was a zero extent count field when big
extent counts are in use, and it turns out the dinode verifier
doesn't detect that specific corruption case, either. So fix it too.
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
-rw-r--r-- | libxfs/xfs_inode_buf.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/libxfs/xfs_inode_buf.c b/libxfs/xfs_inode_buf.c index 74a1bd2274..fd351c252a 100644 --- a/libxfs/xfs_inode_buf.c +++ b/libxfs/xfs_inode_buf.c @@ -507,6 +507,9 @@ xfs_dinode_verify( if (mode && nextents + naextents > nblocks) return __this_address; + if (nextents + naextents == 0 && nblocks != 0) + return __this_address; + if (S_ISDIR(mode) && nextents > mp->m_dir_geo->max_extents) return __this_address; |