From: Darrick J. Wong Date: Mon, 29 Jul 2024 23:23:25 +0000 (-0700) Subject: xfs_repair: junk parent pointer attributes when filesystem doesn't support them X-Git-Tag: v6.10.0~6^2~9 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5d8b51bce11c5adfa2f8e4f36ff23e06a1dbdce5;p=thirdparty%2Fxfsprogs-dev.git xfs_repair: junk parent pointer attributes when filesystem doesn't support them Drop a parent pointer xattr if the filesystem doesn't support parent pointers. Signed-off-by: Darrick J. Wong Reviewed-by: Christoph Hellwig --- diff --git a/repair/attr_repair.c b/repair/attr_repair.c index 2e97fd97..50159b9a 100644 --- a/repair/attr_repair.c +++ b/repair/attr_repair.c @@ -327,6 +327,13 @@ process_shortform_attr( NULL, currententry->namelen, currententry->valuelen); + if ((currententry->flags & XFS_ATTR_PARENT) && + !xfs_has_parent(mp)) { + do_warn( + _("parent pointer found on filesystem that doesn't support parent pointers\n")); + junkit |= 1; + } + remainingspace = remainingspace - xfs_attr_sf_entsize(currententry); @@ -527,6 +534,15 @@ process_leaf_attr_local( return -1; } } + + if ((entry->flags & XFS_ATTR_PARENT) && !xfs_has_parent(mp)) { + do_warn( + _("parent pointer found in attribute entry %d in attr block %u, inode %" + PRIu64 " on filesystem that doesn't support parent pointers\n"), + i, da_bno, ino); + return -1; + } + return xfs_attr_leaf_entsize_local(local->namelen, be16_to_cpu(local->valuelen)); } @@ -562,6 +578,20 @@ process_leaf_attr_remote( return -1; } + if (entry->flags & XFS_ATTR_PARENT) { + if (!xfs_has_parent(mp)) + do_warn( + _("parent pointer found in attribute entry %d in attr block %u, inode %" + PRIu64 " on filesystem that doesn't support parent pointers\n"), + i, da_bno, ino); + else + do_warn( + _("parent pointer found in attribute entry %d in attr block %u, inode %" + PRIu64 " with bogus remote value\n"), + i, da_bno, ino); + return -1; + } + value = malloc(be32_to_cpu(remotep->valuelen)); if (value == NULL) { do_warn(