osdep/linux: Convert partition start to disk sector length
When reading data off a disk, sector values are based on the disk sector length. Within grub_util_fd_open_device(), the start of the partition was taken directly from grub's partition information structure, which uses the internal sector length (currently 512b), but never transformed to the disk's sector length. Subsequent calculations were all wrong for devices that have a diverging sector length and the functions eventually skipped to the wrong stream location, reading invalid data. Signed-off-by: Mihai Moldovan <ionic@ionic.de> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
parent
4f9642a479
commit
d3b1d4c188
1 changed files with 2 additions and 1 deletions
|
@ -374,7 +374,8 @@ grub_util_fd_open_device (const grub_disk_t disk, grub_disk_addr_t sector, int f
|
||||||
char dev[PATH_MAX];
|
char dev[PATH_MAX];
|
||||||
grub_disk_addr_t part_start = 0;
|
grub_disk_addr_t part_start = 0;
|
||||||
|
|
||||||
part_start = grub_partition_get_start (disk->partition);
|
part_start = grub_partition_get_start (disk->partition)
|
||||||
|
>> (disk->log_sector_size - GRUB_DISK_SECTOR_BITS);
|
||||||
|
|
||||||
strncpy (dev, grub_util_biosdisk_get_osdev (disk), sizeof (dev) - 1);
|
strncpy (dev, grub_util_biosdisk_get_osdev (disk), sizeof (dev) - 1);
|
||||||
dev[sizeof(dev) - 1] = '\0';
|
dev[sizeof(dev) - 1] = '\0';
|
||||||
|
|
Loading…
Reference in a new issue