From: Dave Chinner Date: Thu, 15 Feb 2024 08:27:54 +0000 (+0100) Subject: xfs: inode recovery does not validate the recovered inode X-Git-Tag: v6.7.0~32 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=53d96fc6b19415dfe1dedcf95099b3333ae4fe92;p=thirdparty%2Fxfsprogs-dev.git 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 Reviewed-by: "Darrick J. Wong" Signed-off-by: Chandan Babu R Signed-off-by: Carlos Maiolino --- diff --git a/libxfs/xfs_inode_buf.c b/libxfs/xfs_inode_buf.c index 74a1bd22..fd351c25 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;