|
@@ -350,7 +350,8 @@ static int bfs_fill_super(struct super_block *s, void *data, int silent)
|
|
|
|
|
|
s->s_magic = BFS_MAGIC;
|
|
s->s_magic = BFS_MAGIC;
|
|
|
|
|
|
- if (le32_to_cpu(bfs_sb->s_start) > le32_to_cpu(bfs_sb->s_end)) {
|
|
|
|
|
|
+ if (le32_to_cpu(bfs_sb->s_start) > le32_to_cpu(bfs_sb->s_end) ||
|
|
|
|
+ le32_to_cpu(bfs_sb->s_start) < BFS_BSIZE) {
|
|
printf("Superblock is corrupted\n");
|
|
printf("Superblock is corrupted\n");
|
|
goto out1;
|
|
goto out1;
|
|
}
|
|
}
|
|
@@ -359,9 +360,11 @@ static int bfs_fill_super(struct super_block *s, void *data, int silent)
|
|
sizeof(struct bfs_inode)
|
|
sizeof(struct bfs_inode)
|
|
+ BFS_ROOT_INO - 1;
|
|
+ BFS_ROOT_INO - 1;
|
|
imap_len = (info->si_lasti / 8) + 1;
|
|
imap_len = (info->si_lasti / 8) + 1;
|
|
- info->si_imap = kzalloc(imap_len, GFP_KERNEL);
|
|
|
|
- if (!info->si_imap)
|
|
|
|
|
|
+ info->si_imap = kzalloc(imap_len, GFP_KERNEL | __GFP_NOWARN);
|
|
|
|
+ if (!info->si_imap) {
|
|
|
|
+ printf("Cannot allocate %u bytes\n", imap_len);
|
|
goto out1;
|
|
goto out1;
|
|
|
|
+ }
|
|
for (i = 0; i < BFS_ROOT_INO; i++)
|
|
for (i = 0; i < BFS_ROOT_INO; i++)
|
|
set_bit(i, info->si_imap);
|
|
set_bit(i, info->si_imap);
|
|
|
|
|