40 lines
1.3 KiB
Diff
40 lines
1.3 KiB
Diff
|
From f5637450735989298399da1ee312d46b073e4e04 Mon Sep 17 00:00:00 2001
|
||
|
From: Dave Chinner <dchinner@redhat.com>
|
||
|
Date: Thu, 24 Oct 2024 13:51:05 +1100
|
||
|
Subject: xfs: sb_spino_align is not verified
|
||
|
|
||
|
It's just read in from the superblock and used without doing any
|
||
|
validity checks at all on the value.
|
||
|
|
||
|
Fixes: fb4f2b4e5a82 ("xfs: add sparse inode chunk alignment superblock field")
|
||
|
Signed-off-by: Dave Chinner <dchinner@redhat.com>
|
||
|
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
|
||
|
Signed-off-by: Carlos Maiolino <cem@kernel.org>
|
||
|
---
|
||
|
fs/xfs/libxfs/xfs_sb.c | 14 ++++++++++++++
|
||
|
1 file changed, 14 insertions(+)
|
||
|
|
||
|
--- a/fs/xfs/libxfs/xfs_sb.c
|
||
|
+++ b/fs/xfs/libxfs/xfs_sb.c
|
||
|
@@ -391,6 +391,20 @@ xfs_validate_sb_common(
|
||
|
sbp->sb_inoalignmt, align);
|
||
|
return -EINVAL;
|
||
|
}
|
||
|
+
|
||
|
+ if (!sbp->sb_spino_align ||
|
||
|
+ sbp->sb_spino_align > sbp->sb_inoalignmt ||
|
||
|
+ (sbp->sb_inoalignmt % sbp->sb_spino_align) != 0) {
|
||
|
+ xfs_warn(mp,
|
||
|
+ "Sparse inode alignment (%u) is invalid.",
|
||
|
+ sbp->sb_spino_align);
|
||
|
+ return -EINVAL;
|
||
|
+ }
|
||
|
+ } else if (sbp->sb_spino_align) {
|
||
|
+ xfs_warn(mp,
|
||
|
+ "Sparse inode alignment (%u) should be zero.",
|
||
|
+ sbp->sb_spino_align);
|
||
|
+ return -EINVAL;
|
||
|
}
|
||
|
} else if (sbp->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD |
|
||
|
XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) {
|