[PATCH 1/1] xfs_repair: double-check with shortform attr verifiers

Darrick J. Wong
2024-03-13T02:11:17Z

From: Darrick J. Wong <djwong@kernel.org>

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 <djwong@kernel.org>
---
repair/attr_repair.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)

diff --git a/repair/attr_repair.c b/repair/attr_repair.c
index 01e4afb90d5c..f117f9aef9ce 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);
}