+2012-01-25 Vladimir Serbinenko <phcoder@gmail.com>
+
+ * grub-core/fs/btrfs.c (grub_btrfs_device): New field size.
+ (read_sblock): Don't attempt to read superblocks outside the disk size.
+
2012-01-25 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/fs/nilfs2.c (grub_nilfs2_load_sb): Use device size from
struct grub_btrfs_device
{
grub_uint64_t device_id;
- grub_uint8_t dummy[0x62 - 8];
+ grub_uint64_t size;
+ grub_uint8_t dummy[0x62 - 0x10];
} __attribute__ ((packed));
struct grub_btrfs_superblock
for (i = 0; i < ARRAY_SIZE (superblock_sectors); i++)
{
struct grub_btrfs_superblock sblock;
+ /* Don't try additional superblocks beyond device size. */
+ if (i && (grub_le_to_cpu64 (sblock.this_device.size)
+ >> GRUB_DISK_SECTOR_BITS) <= superblock_sectors[i])
+ break;
err = grub_disk_read (disk, superblock_sectors[i], 0,
sizeof (sblock), &sblock);
if (err == GRUB_ERR_OUT_OF_RANGE)