[PATCH] xfs: check directory data block header padding in scrub

Yuto Ohnuki posted 1 patch 2 months, 1 week ago
There is a newer version of this series
fs/xfs/scrub/dir.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
[PATCH] xfs: check directory data block header padding in scrub
Posted by Yuto Ohnuki 2 months, 1 week ago
The pad field in xfs_dir3_data_hdr exists for 64-bit alignment and
should always be zero. The scrub code already checks the pad field for
leaf and free block headers but was missing the same check for data
block headers. Add the missing check.

Signed-off-by: Yuto Ohnuki <ytohnuki@amazon.com>
---
 fs/xfs/scrub/dir.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/fs/xfs/scrub/dir.c b/fs/xfs/scrub/dir.c
index e09724cd3725..2db4def3358c 100644
--- a/fs/xfs/scrub/dir.c
+++ b/fs/xfs/scrub/dir.c
@@ -492,7 +492,12 @@ xchk_directory_data_bestfree(
 		goto out;
 	xchk_buffer_recheck(sc, bp);
 
-	/* XXX: Check xfs_dir3_data_hdr.pad is zero once we start setting it. */
+	if (xfs_has_crc(sc->mp)) {
+		struct xfs_dir3_data_hdr    *hdr3 = bp->b_addr;
+
+		if (hdr3->pad != cpu_to_be32(0))
+			xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, lblk);
+	}
 
 	if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)
 		goto out_buf;
-- 
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
Re: [PATCH] xfs: check directory data block header padding in scrub
Posted by Darrick J. Wong 2 months, 1 week ago
On Sat, Apr 04, 2026 at 01:50:33PM +0100, Yuto Ohnuki wrote:
> The pad field in xfs_dir3_data_hdr exists for 64-bit alignment and
> should always be zero. The scrub code already checks the pad field for
> leaf and free block headers but was missing the same check for data
> block headers. Add the missing check.
> 
> Signed-off-by: Yuto Ohnuki <ytohnuki@amazon.com>
> ---
>  fs/xfs/scrub/dir.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/xfs/scrub/dir.c b/fs/xfs/scrub/dir.c
> index e09724cd3725..2db4def3358c 100644
> --- a/fs/xfs/scrub/dir.c
> +++ b/fs/xfs/scrub/dir.c
> @@ -492,7 +492,12 @@ xchk_directory_data_bestfree(
>  		goto out;
>  	xchk_buffer_recheck(sc, bp);
>  
> -	/* XXX: Check xfs_dir3_data_hdr.pad is zero once we start setting it. */

But where do we set xfs_dir3_data_hdr.pad to zero?  xfs_dir3_data_init
does not seem to do this...

> +	if (xfs_has_crc(sc->mp)) {
> +		struct xfs_dir3_data_hdr    *hdr3 = bp->b_addr;
> +
> +		if (hdr3->pad != cpu_to_be32(0))
> +			xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, lblk);

...and even if there is code that does the zero-initialization, it's
possible that old kernels wrote out garbage in the pad field and were
quite ok with that.  At best you can set XFS_SCRUB_OFLAG_PREEN to
indicate that this kernel should clean it out.

(For that you'd also want to add a new xchk_fblock_set_corrupt helper to
record which block tripped the "optimization possible" message.)

--D

> +	}
>  
>  	if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)
>  		goto out_buf;
> -- 
> 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
> 
> 
> 
>
Re: [PATCH] xfs: check directory data block header padding in scrub
Posted by Yuto Ohnuki 2 months ago
On Mon, Apr 06, 2026 at 08:21:10AM -0700, Darrick J. Wong wrote:

Hi Darrick,
Thank you for the review.

> But where do we set xfs_dir3_data_hdr.pad to zero?  xfs_dir3_data_init
> does not seem to do this...

Thank you for pointing that out. I'll fix xfs_dir3_data_init to zero
the full xfs_dir3_data_hdr instead of just xfs_dir3_blk_hdr so that
the pad field is covered by the memset.

> ...and even if there is code that does the zero-initialization, it's
> possible that old kernels wrote out garbage in the pad field and were
> quite ok with that.  At best you can set XFS_SCRUB_OFLAG_PREEN to
> indicate that this kernel should clean it out.
> 
> (For that you'd also want to add a new xchk_fblock_set_corrupt helper to
> record which block tripped the "optimization possible" message.)
> 
> --D
> 

Understood. I'll switch to xchk_fblock_set_preen and add the missing
helper for that.

I'll send a v2 with these changes.

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