]> git.proxmox.com Git - grub2.git/commitdiff
* grub-core/fs/ext2.c (grub_ext2_mount): Additional checks for superblock validity.
authorVladimir Serbinenko <phcoder@gmail.com>
Tue, 20 Jan 2015 13:40:27 +0000 (14:40 +0100)
committerVladimir Serbinenko <phcoder@gmail.com>
Wed, 21 Jan 2015 16:42:11 +0000 (17:42 +0100)
ChangeLog
grub-core/fs/ext2.c

index d7d5c40e681defe24063cae45bd9003f992e4b52..f69541ead2afbb130efc4e295cb787e38cf162a0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-20  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/fs/ext2.c (grub_ext2_mount): Additional
+       checks for superblock validity.
+
 2015-01-20  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/fs/ufs.c (grub_ufs_mount): Check
index 217771d02386967a64409192d8cd5fa7410ef911..44c7974e3a98cf5fa7bcb9f1ebc4e4c46b7753e4 100644 (file)
@@ -577,7 +577,12 @@ grub_ext2_mount (grub_disk_t disk)
 
   /* Make sure this is an ext2 filesystem.  */
   if (data->sblock.magic != grub_cpu_to_le16_compile_time (EXT2_MAGIC)
-      || grub_le_to_cpu32 (data->sblock.log2_block_size) >= 16)
+      || grub_le_to_cpu32 (data->sblock.log2_block_size) >= 16
+      || data->sblock.inodes_per_group == 0
+      /* 20 already means 1GiB blocks. We don't want to deal with blocks overflowing int32. */
+      || grub_le_to_cpu32 (data->sblock.log2_block_size) > 20
+      || EXT2_INODE_SIZE (data) == 0
+      || EXT2_BLOCK_SIZE (data) / EXT2_INODE_SIZE (data) == 0)
     {
       grub_error (GRUB_ERR_BAD_FS, "not an ext2 filesystem");
       goto fail;