]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commit
xfs_repair: don't crash on partially sparse inode clusters
authorDarrick J. Wong <darrick.wong@oracle.com>
Mon, 28 Sep 2020 21:35:37 +0000 (17:35 -0400)
committerEric Sandeen <sandeen@sandeen.net>
Mon, 28 Sep 2020 21:35:37 +0000 (17:35 -0400)
commitf4ff8086586b16b07ddfc39fd6fb52aa4a25c3ae
treed078ef8e375c5e59af1f705732e9a8ba38af2eda
parent97a4059660b27a9b0e3d8cdde5dbef8712685865
xfs_repair: don't crash on partially sparse inode clusters

While running xfs/364 to fuzz the middle bit of recs[2].holemask, I
observed a crash in xfs_repair stemming from the fact that each sparse
bit accounts for 4 inodes, but inode cluster buffers can map to more
than four inodes.

When the first inode in an inode cluster is marked sparse,
process_inode_chunk won't try to load the inode cluster buffer.
Unfortunately, if the holemask indicates that there are inodes present
anywhere in the rest of the cluster buffer, repair will try to check the
corresponding cluster buffer, even if we didn't load it.  This leads to
a null pointer dereference, which crashes repair.

Avoid the null pointer dereference by marking the inode sparse and
moving on to the next inode.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
repair/dino_chunks.c