xfs: fix a sloppy memory handling bug in xfs_iroot_realloc
authorDarrick J. Wong <djwong@kernel.org>
Fri, 30 Aug 2024 22:37:20 +0000 (15:37 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Sun, 1 Sep 2024 15:58:20 +0000 (08:58 -0700)
commitde55149b6639e903c4d06eb0474ab2c05060e61d
tree3432aa518d26b752454f13b3599d66eee7cda470
parentc460f0f1a2bc219495e19e43daac6f8c902d81d8
xfs: fix a sloppy memory handling bug in xfs_iroot_realloc

While refactoring code, I noticed that when xfs_iroot_realloc tries to
shrink a bmbt root block, it allocates a smaller new block and then
copies "records" and pointers to the new block.  However, bmbt root
blocks cannot ever be leaves, which means that it's not technically
correct to copy records.  We /should/ be copying keys.

Note that this has never resulted in actual memory corruption because
sizeof(bmbt_rec) == (sizeof(bmbt_key) + sizeof(bmbt_ptr)).  However,
this will no longer be true when we start adding realtime rmap stuff,
so fix this now.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/libxfs/xfs_inode_fork.c