xfs: add more checks to superblock validation

There had been reports where xfs filesystem was randomly
corrupted with fsfuzzer, and xfs failed to handle it
gracefully. This patch fixes couple of reported problem
by providing additional checks in the superblock
validation routine.

Signed-off-by: Olaf Weber <olaf@sgi.com>
Reviewed-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Felix Blyakher <felixb@sgi.com>

authored by

Olaf Weber and committed by
Felix Blyakher
2ac00af7 f25181f5

+3
+3
fs/xfs/xfs_mount.c
··· 291 sbp->sb_sectsize > XFS_MAX_SECTORSIZE || 292 sbp->sb_sectlog < XFS_MIN_SECTORSIZE_LOG || 293 sbp->sb_sectlog > XFS_MAX_SECTORSIZE_LOG || 294 sbp->sb_blocksize < XFS_MIN_BLOCKSIZE || 295 sbp->sb_blocksize > XFS_MAX_BLOCKSIZE || 296 sbp->sb_blocklog < XFS_MIN_BLOCKSIZE_LOG || 297 sbp->sb_blocklog > XFS_MAX_BLOCKSIZE_LOG || 298 sbp->sb_inodesize < XFS_DINODE_MIN_SIZE || 299 sbp->sb_inodesize > XFS_DINODE_MAX_SIZE || 300 sbp->sb_inodelog < XFS_DINODE_MIN_LOG || 301 sbp->sb_inodelog > XFS_DINODE_MAX_LOG || 302 (sbp->sb_blocklog - sbp->sb_inodelog != sbp->sb_inopblog) || 303 (sbp->sb_rextsize * sbp->sb_blocksize > XFS_MAX_RTEXTSIZE) || 304 (sbp->sb_rextsize * sbp->sb_blocksize < XFS_MIN_RTEXTSIZE) ||
··· 291 sbp->sb_sectsize > XFS_MAX_SECTORSIZE || 292 sbp->sb_sectlog < XFS_MIN_SECTORSIZE_LOG || 293 sbp->sb_sectlog > XFS_MAX_SECTORSIZE_LOG || 294 + sbp->sb_sectsize != (1 << sbp->sb_sectlog) || 295 sbp->sb_blocksize < XFS_MIN_BLOCKSIZE || 296 sbp->sb_blocksize > XFS_MAX_BLOCKSIZE || 297 sbp->sb_blocklog < XFS_MIN_BLOCKSIZE_LOG || 298 sbp->sb_blocklog > XFS_MAX_BLOCKSIZE_LOG || 299 + sbp->sb_blocksize != (1 << sbp->sb_blocklog) || 300 sbp->sb_inodesize < XFS_DINODE_MIN_SIZE || 301 sbp->sb_inodesize > XFS_DINODE_MAX_SIZE || 302 sbp->sb_inodelog < XFS_DINODE_MIN_LOG || 303 sbp->sb_inodelog > XFS_DINODE_MAX_LOG || 304 + sbp->sb_inodesize != (1 << sbp->sb_inodelog) || 305 (sbp->sb_blocklog - sbp->sb_inodelog != sbp->sb_inopblog) || 306 (sbp->sb_rextsize * sbp->sb_blocksize > XFS_MAX_RTEXTSIZE) || 307 (sbp->sb_rextsize * sbp->sb_blocksize < XFS_MIN_RTEXTSIZE) ||