Commit 800a53b4 authored by Kirk McKusick's avatar Kirk McKusick
Browse files

Bug fix to UFS/FFS superblock integrity checks when reading a superblock.

One of the checks was that the cylinder group size (fs_cgsize)
matched that calculated by CGSIZE(). The value calculated by CGSIZE()
has changed over time as the filesystem has evolved. Thus comparing
the value of CGSIZE() of the current generation filesystem may not
match the size as computed by CGSIZE() that was in effect at the
time an older filesystem was created. Therefore the check for
fs_cgsize is changed to simply ensure that it is not larger than
the filesystem blocksize (fs_bsize).

Reported by: Martin Birgmeier
Tested by:   Martin Birgmeier
MFC after:   1 month (with 076002f2)
PR:          264450
Differential Revision:
parent fb6eaf74
......@@ -385,7 +385,7 @@ validate_sblock(struct fs *fs, int isaltsblk)
roundup(howmany(SBLOCKSIZE, fs->fs_fsize), fs->fs_frag) ||
fs->fs_iblkno != fs->fs_cblkno + fs->fs_frag ||
fs->fs_dblkno != fs->fs_iblkno + fs->fs_ipg / INOPF(fs) ||
fs->fs_cgsize != fragroundup(fs, CGSIZE(fs)))
fs->fs_cgsize > fs->fs_bsize)
return (ENOENT);
if (fs->fs_csaddr != cgdmin(fs, 0) ||
fs->fs_cssize !=
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment