From 5d8b51bce11c5adfa2f8e4f36ff23e06a1dbdce5 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Mon, 29 Jul 2024 16:23:25 -0700 Subject: [PATCH] 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 --- repair/attr_repair.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) 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( -- 2.47.2