xfs: fix log recovery buffer allocation for the legacy h_size fixup
authorChristoph Hellwig <hch@lst.de>
Tue, 30 Apr 2024 04:07:55 +0000 (06:07 +0200)
committerChandan Babu R <chandanbabu@kernel.org>
Fri, 3 May 2024 05:40:17 +0000 (11:10 +0530)
commit45cf976008ddef4a9c9a30310c9b4fb2a9a6602a
treefa9900e5bd3bfd13ccbed7f0dcb3899e5e28bb4c
parent0370f9bb49f139cc3f9916a83d50eff2ef790232
xfs: fix log recovery buffer allocation for the legacy h_size fixup

Commit a70f9fe52daa ("xfs: detect and handle invalid iclog size set by
mkfs") added a fixup for incorrect h_size values used for the initial
umount record in old xfsprogs versions.  Later commit 0c771b99d6c9
("xfs: clean up calculation of LR header blocks") cleaned up the log
reover buffer calculation, but stoped using the fixed up h_size value
to size the log recovery buffer, which can lead to an out of bounds
access when the incorrect h_size does not come from the old mkfs
tool, but a fuzzer.

Fix this by open coding xlog_logrec_hblks and taking the fixed h_size
into account for this calculation.

Fixes: 0c771b99d6c9 ("xfs: clean up calculation of LR header blocks")
Reported-by: Sam Sun <samsun1006219@gmail.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
fs/xfs/xfs_log_recover.c