fs/xfs/scrub/dabtree.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
The da node block header (xfs_da3_node_hdr) contains a __pad32 field
that should always be zero. Add a check for this during directory and
attribute btree scrubbing so that non-zero padding is flagged as
corruption.
Signed-off-by: Yuto Ohnuki <ytohnuki@amazon.com>
---
fs/xfs/scrub/dabtree.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/fs/xfs/scrub/dabtree.c b/fs/xfs/scrub/dabtree.c
index 1a71d36898b1..73d5a3bd936a 100644
--- a/fs/xfs/scrub/dabtree.c
+++ b/fs/xfs/scrub/dabtree.c
@@ -454,7 +454,12 @@ xchk_da_btree_block(
}
}
- /* XXX: Check hdr3.pad32 once we know how to fix it. */
+ if (xfs_has_crc(ip->i_mount)) {
+ struct xfs_da3_node_hdr *nodehdr3 = blk->bp->b_addr;
+
+ if (be32_to_cpu(nodehdr3->__pad32) != 0)
+ xchk_da_set_corrupt(ds, level);
+ }
break;
default:
xchk_da_set_corrupt(ds, level);
--
2.50.1
Amazon Web Services EMEA SARL, 38 avenue John F. Kennedy, L-1855 Luxembourg, R.C.S. Luxembourg B186284
Amazon Web Services EMEA SARL, Irish Branch, One Burlington Plaza, Burlington Road, Dublin 4, Ireland, branch registration number 908705
On Sat, Apr 04, 2026 at 03:30:44PM +0100, Yuto Ohnuki wrote:
> The da node block header (xfs_da3_node_hdr) contains a __pad32 field
> that should always be zero. Add a check for this during directory and
> attribute btree scrubbing so that non-zero padding is flagged as
> corruption.
>
> Signed-off-by: Yuto Ohnuki <ytohnuki@amazon.com>
> ---
> fs/xfs/scrub/dabtree.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/fs/xfs/scrub/dabtree.c b/fs/xfs/scrub/dabtree.c
> index 1a71d36898b1..73d5a3bd936a 100644
> --- a/fs/xfs/scrub/dabtree.c
> +++ b/fs/xfs/scrub/dabtree.c
> @@ -454,7 +454,12 @@ xchk_da_btree_block(
> }
> }
>
> - /* XXX: Check hdr3.pad32 once we know how to fix it. */
Same question as the previous patch -- does xfs_da3_node_create actually
zero out the pad field?
> + if (xfs_has_crc(ip->i_mount)) {
> + struct xfs_da3_node_hdr *nodehdr3 = blk->bp->b_addr;
> +
> + if (be32_to_cpu(nodehdr3->__pad32) != 0)
> + xchk_da_set_corrupt(ds, level);
and same comment about how you can only set xchk_da_set_preen if old
kernels were ok with nonzero __pad32.
--D
> + }
> break;
> default:
> xchk_da_set_corrupt(ds, level);
> --
> 2.50.1
>
>
>
>
> Amazon Web Services EMEA SARL, 38 avenue John F. Kennedy, L-1855 Luxembourg, R.C.S. Luxembourg B186284
>
> Amazon Web Services EMEA SARL, Irish Branch, One Burlington Plaza, Burlington Road, Dublin 4, Ireland, branch registration number 908705
>
>
>
>
On Mon, Apr 06, 2026 at 08:23:04AM -0700, Darrick J. Wong wrote: Thank you for reviewing this patch as well. > Same question as the previous patch -- does xfs_da3_node_create actually > zero out the pad field? Yes, xfs_da3_node_create already does memset(hdr3, 0, sizeof(struct xfs_da3_node_hdr)) which covers __pad32. > and same comment about how you can only set xchk_da_set_preen if old > kernels were ok with nonzero __pad32. > > --D > Understood. I'll switch to xchk_da_set_preen as well. I'll send a v2 with this change. Thanks, Yuto Amazon Web Services EMEA SARL, 38 avenue John F. Kennedy, L-1855 Luxembourg, R.C.S. Luxembourg B186284 Amazon Web Services EMEA SARL, Irish Branch, One Burlington Plaza, Burlington Road, Dublin 4, Ireland, branch registration number 908705
© 2016 - 2026 Red Hat, Inc.