Skip to content

Commit

Permalink
omfs: sanity check cluster size
Browse files Browse the repository at this point in the history
A corrupt filesystem could have a bad cluster size; this could result in
the filesystem allocating too much space for files if too large, or
getting stuck in omfs_allocate_block if too small.  The proper range is
1-8 blocks.

Reported-by: Eric Sesterhenn <[email protected]>
Signed-off-by: Bob Copeland <[email protected]>
  • Loading branch information
bcopeland committed Jul 10, 2010
1 parent 9442e54 commit 8800a04
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 0 deletions.
6 changes: 6 additions & 0 deletions fs/omfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -517,6 +517,12 @@ static int omfs_fill_super(struct super_block *sb, void *data, int silent)
(unsigned long long) sbi->s_num_blocks);
goto out_brelse_bh2;
}
if (sbi->s_clustersize < 1 ||
sbi->s_clustersize > OMFS_MAX_CLUSTER_SIZE) {
printk(KERN_ERR "omfs: cluster size out of range (%d)",
sbi->s_clustersize);
goto out_brelse_bh2;
}

ret = omfs_get_imap(sb);
if (ret)
Expand Down
1 change: 1 addition & 0 deletions fs/omfs/omfs_fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#define OMFS_EXTENT_CONT 0x40
#define OMFS_XOR_COUNT 19
#define OMFS_MAX_BLOCK_SIZE 8192
#define OMFS_MAX_CLUSTER_SIZE 8

struct omfs_super_block {
char s_fill1[256];
Expand Down

0 comments on commit 8800a04

Please sign in to comment.