From: Darrick J. Wong Date: Mon, 28 Sep 2020 21:35:37 +0000 (-0400) Subject: xfs_repair: complain about unwritten extents when they're not appropriate X-Git-Tag: xfsprogs-5.9-fixes2_2020-10-10~19 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=e487b5572476cca3f4a3e143757822b70138635e;p=thirdparty%2Fxfsprogs-dev.git xfs_repair: complain about unwritten extents when they're not appropriate We don't allow unwritten extents in the attr fork, and we don't allow them in the data fork except for regular files. Check that this is the case. Found by manually fuzzing the extentflag field of an attr fork to one. Signed-off-by: Darrick J. Wong Reviewed-by: Christoph Hellwig Signed-off-by: Eric Sandeen --- diff --git a/repair/dinode.c b/repair/dinode.c index 716a77466..f25ff1859 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -347,6 +347,28 @@ _("bmap rec out of order, inode %" PRIu64" entry %d " cp = irec.br_blockcount; sp = irec.br_startblock; + if (irec.br_state != XFS_EXT_NORM) { + /* No unwritten extents in the attr fork */ + if (whichfork == XFS_ATTR_FORK) { + do_warn( +_("unwritten extent (off = %" PRIu64 ", fsbno = %" PRIu64 ") in ino %" PRIu64 " attr fork\n"), + irec.br_startoff, + irec.br_startblock, + ino); + goto done; + } + + /* No unwritten extents in non-regular files */ + if (type != XR_INO_DATA && type != XR_INO_RTDATA) { + do_warn( +_("unwritten extent (off = %" PRIu64 ", fsbno = %" PRIu64 ") in non-regular file ino %" PRIu64 "\n"), + irec.br_startoff, + irec.br_startblock, + ino); + goto done; + } + } + /* * check numeric validity of the extent */