Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 54f93b74 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4:
  ext4: check block device size on mount
  ext4: Fix off-by-one-error in ext4_valid_extent_idx()
  ext4: Fix big-endian problem in __ext4_check_blockref()
parents 3b3809ac 0f2ddca6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -342,7 +342,7 @@ static int ext4_valid_extent_idx(struct inode *inode,
	ext4_fsblk_t block = idx_pblock(ext_idx);
	struct ext4_super_block *es = EXT4_SB(inode->i_sb)->s_es;
	if (unlikely(block < le32_to_cpu(es->s_first_data_block) ||
			(block > ext4_blocks_count(es))))
			(block >= ext4_blocks_count(es))))
		return 0;
	else
		return 1;
+4 −4
Original line number Diff line number Diff line
@@ -372,16 +372,16 @@ static int ext4_block_to_path(struct inode *inode,
}

static int __ext4_check_blockref(const char *function, struct inode *inode,
				 unsigned int *p, unsigned int max) {
				 __le32 *p, unsigned int max) {

	unsigned int maxblocks = ext4_blocks_count(EXT4_SB(inode->i_sb)->s_es);
	unsigned int *bref = p;
	__le32 *bref = p;
	while (bref < p+max) {
		if (unlikely(*bref >= maxblocks)) {
		if (unlikely(le32_to_cpu(*bref) >= maxblocks)) {
			ext4_error(inode->i_sb, function,
				   "block reference %u >= max (%u) "
				   "in inode #%lu, offset=%d",
				   *bref, maxblocks,
				   le32_to_cpu(*bref), maxblocks,
				   inode->i_ino, (int)(bref-p));
 			return -EIO;
 		}
+9 −0
Original line number Diff line number Diff line
@@ -2508,6 +2508,15 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
	if (EXT4_BLOCKS_PER_GROUP(sb) == 0)
		goto cantfind_ext4;

	/* check blocks count against device size */
	blocks_count = sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits;
	if (blocks_count && ext4_blocks_count(es) > blocks_count) {
		printk(KERN_WARNING "EXT4-fs: bad geometry: block count %llu "
		       "exceeds size of device (%llu blocks)\n",
		       ext4_blocks_count(es), blocks_count);
		goto failed_mount;
	}

        /*
         * It makes no sense for the first data block to be beyond the end
         * of the filesystem.