bfs: check that filesystem fits on the blockdevice
PATCH 2/2 bfs: check that filesystem fits on the blockdevice
Since all sanity checks rely on the validity of s_start which gets only checked to be smaller than s_end, we should also check if s_end is sane. Now we also try to retrieve the last block of the filesystem, which is computed by s_end. If this fails, something is bogus.
Signed-off-by Eric Sesterhenn <[email protected]>
Acked-by Tigran Aivazian <[email protected]>
fs/bfs/inode.c renamed from fs/bfs/inode.c.1 +12 -0
@@ -390,6 +390,18 @@ static int bfs_fill_super(struct super_b - le32_to_cpu(bfs_sb->s_start)) >> BFS_BSIZE_BITS; info->si_freei =0 ; info->si_lf_eblk =0 ; + +/* can we read the last block? */ + bh =sb_bread (s, info->si_blocks -1 ); +if (!bh) { +printf ("Last block not available: %lu\n" , info->si_blocks -1 ); +iput (inode); + ret = -EIO ; +kfree (info->si_imap); + goto out; + } +brelse (bh); + bh =NULL ;for (i =BFS_ROOT_INO ; i <= info->si_lasti; i++) {struct bfs_inode *di;