From: Darrick J. Wong Date: Mon, 15 Apr 2024 23:07:45 +0000 (-0700) Subject: xfs_repair: double-check with shortform attr verifiers X-Git-Tag: v6.8.0~35 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a66875ddf0d3ac19af4decb49c5304debdef3b51;p=thirdparty%2Fxfsprogs-dev.git xfs_repair: double-check with shortform attr verifiers Call the shortform attr structure verifier as the last thing we do in process_shortform_attr to make sure that we don't leave any latent errors for the kernel to stumble over. Signed-off-by: Darrick J. Wong Reviewed-by: Christoph Hellwig Reviewed-by: Bill O'Donnell --- diff --git a/repair/attr_repair.c b/repair/attr_repair.c index 01e4afb9..f117f9ae 100644 --- a/repair/attr_repair.c +++ b/repair/attr_repair.c @@ -212,6 +212,7 @@ process_shortform_attr( { struct xfs_attr_sf_hdr *hdr = XFS_DFORK_APTR(dip); struct xfs_attr_sf_entry *currententry, *nextentry, *tempentry; + xfs_failaddr_t fa; int i, junkit; int currentsize, remainingspace; @@ -373,6 +374,22 @@ process_shortform_attr( } } + fa = libxfs_attr_shortform_verify(hdr, be16_to_cpu(hdr->totsize)); + if (fa) { + if (no_modify) { + do_warn( + _("inode %" PRIu64 " shortform attr verifier failure, would have cleared attrs\n"), + ino); + } else { + do_warn( + _("inode %" PRIu64 " shortform attr verifier failure, cleared attrs\n"), + ino); + hdr->count = 0; + hdr->totsize = cpu_to_be16(sizeof(struct xfs_attr_sf_hdr)); + *repair = 1; + } + } + return(*repair); }