linux/fs/xfs/scrub
Darrick J. Wong 6c7289528d xfs: abort directory parent scrub scans if we encounter a zapped directory
In a previous patch, we added some code to perform sufficient repairs
to an ondisk inode record such that the inode cache would be willing to
load the inode.  If the broken inode was a shortform directory, it will
reset the directory to something plausible, which is to say an empty
subdirectory of the root.  The telltale signs that something is
seriously wrong is the broken link count.

Such directories look clean, but they shouldn't participate in a
filesystem scan to find or confirm a directory parent pointer.  Create a
predicate that identifies such directories and abort the scrub.

Found by fuzzing xfs/1554 with multithreaded xfs_scrub enabled and
u3.bmx[0].startblock = zeroes.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
2023-12-15 10:03:37 -08:00
..
agb_bitmap.c xfs: move the per-AG datatype bitmaps to separate files 2023-12-15 10:03:30 -08:00
agb_bitmap.h xfs: move the per-AG datatype bitmaps to separate files 2023-12-15 10:03:30 -08:00
agheader_repair.c xfs: roll the scrub transaction after completing a repair 2023-12-15 10:03:31 -08:00
agheader.c xfs: teach scrub to check for sole ownership of metadata objects 2023-04-11 19:00:15 -07:00
alloc_repair.c xfs: repair free space btrees 2023-12-15 10:03:32 -08:00
alloc.c xfs: repair free space btrees 2023-12-15 10:03:32 -08:00
attr.c xfs: don't load local xattr values during scrub 2023-04-11 19:00:35 -07:00
attr.h xfs: check used space of shortform xattr structures 2023-04-11 19:00:33 -07:00
bitmap.c xfs: move the per-AG datatype bitmaps to separate files 2023-12-15 10:03:30 -08:00
bitmap.h xfs: move the per-AG datatype bitmaps to separate files 2023-12-15 10:03:30 -08:00
bmap.c xfs: set inode sick state flags when we zap either ondisk fork 2023-12-15 10:03:35 -08:00
btree.c xfs: teach scrub to check for sole ownership of metadata objects 2023-04-11 19:00:15 -07:00
btree.h overflow: Add struct_size_t() helper 2023-05-26 13:52:19 -07:00
common.c xfs: abort directory parent scrub scans if we encounter a zapped directory 2023-12-15 10:03:37 -08:00
common.h xfs: abort directory parent scrub scans if we encounter a zapped directory 2023-12-15 10:03:37 -08:00
dabtree.c xfs: scrub should use ECHRNG to signal that the drain is needed 2023-04-11 19:00:00 -07:00
dabtree.h xfs: update copyright years for scrub/ files 2023-04-11 18:59:57 -07:00
dir.c xfs: abort directory parent scrub scans if we encounter a zapped directory 2023-12-15 10:03:37 -08:00
fscounters.c xfs: move the xfs_rtbitmap.c declarations to xfs_rtbitmap.h 2023-10-17 16:24:22 -07:00
health.c xfs: set inode sick state flags when we zap either ondisk fork 2023-12-15 10:03:35 -08:00
health.h xfs: set inode sick state flags when we zap either ondisk fork 2023-12-15 10:03:35 -08:00
ialloc_repair.c xfs: repair inode btrees 2023-12-15 10:03:32 -08:00
ialloc.c xfs: repair inode btrees 2023-12-15 10:03:32 -08:00
inode_repair.c xfs: zap broken inode forks 2023-12-15 10:03:37 -08:00
inode.c xfs: repair inode records 2023-12-15 10:03:36 -08:00
newbt.c xfs: repair free space btrees 2023-12-15 10:03:32 -08:00
newbt.h xfs: repair free space btrees 2023-12-15 10:03:32 -08:00
parent.c xfs: abort directory parent scrub scans if we encounter a zapped directory 2023-12-15 10:03:37 -08:00
quota.c xfs: wrap ilock/iunlock operations on sc->ip 2023-08-10 07:48:08 -07:00
readdir.c xfs: streamline the directory iteration code for scrub 2023-04-11 19:00:17 -07:00
readdir.h xfs: streamline the directory iteration code for scrub 2023-04-11 19:00:17 -07:00
reap.c xfs: move the per-AG datatype bitmaps to separate files 2023-12-15 10:03:30 -08:00
reap.h xfs: use per-AG bitmaps to reap unused AG metadata blocks during repair 2023-08-10 07:48:04 -07:00
refcount_repair.c xfs: repair refcount btrees 2023-12-15 10:03:33 -08:00
refcount.c xfs: repair refcount btrees 2023-12-15 10:03:33 -08:00
repair.c xfs: repair inode records 2023-12-15 10:03:36 -08:00
repair.h xfs: repair inode records 2023-12-15 10:03:36 -08:00
rmap.c xfs: move the per-AG datatype bitmaps to separate files 2023-12-15 10:03:30 -08:00
rtbitmap.c xfs: try to attach dquots to files before repairing them 2023-12-15 10:03:34 -08:00
rtsummary.c xfs: try to attach dquots to files before repairing them 2023-12-15 10:03:34 -08:00
scrub.c xfs: repair inode records 2023-12-15 10:03:36 -08:00
scrub.h xfs: repair inode btrees 2023-12-15 10:03:32 -08:00
stats.c xfs: only call xchk_stats_merge after validating scrub inputs 2023-09-12 10:31:08 -07:00
stats.h xfs: track usage statistics of online fsck 2023-08-10 07:48:07 -07:00
symlink.c xfs: set inode sick state flags when we zap either ondisk fork 2023-12-15 10:03:35 -08:00
trace.c xfs: use accessor functions for summary info words 2023-10-18 16:53:00 -07:00
trace.h xfs: zap broken inode forks 2023-12-15 10:03:37 -08:00
xfarray.c xfs: improve xfarray quicksort pivot 2023-08-10 07:48:07 -07:00
xfarray.h xfs: repair free space btrees 2023-12-15 10:03:32 -08:00
xfile.c xfs: Remove duplicate include 2023-10-12 10:14:45 +05:30
xfile.h xfs: cache pages used for xfarray quicksort convergence 2023-08-10 07:48:06 -07:00
xfs_scrub.h xfs: update copyright years for scrub/ files 2023-04-11 18:59:57 -07:00