diff --git a/ChangeLog b/ChangeLog index aceb55009..ba4a7d7e3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-01-27 Vladimir Serbinenko + + * kern/disk.c (grub_disk_read): Fix offset computation when reading + last sectors. + 2010-01-27 Vladimir Serbinenko * commands/hashsum.c (hash_file): Avoid possible stack overflow by diff --git a/kern/disk.c b/kern/disk.c index 075838d1e..a01373072 100644 --- a/kern/disk.c +++ b/kern/disk.c @@ -441,7 +441,7 @@ grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector, grub_errno = GRUB_ERR_NONE; - num = ((size + GRUB_DISK_SECTOR_SIZE - 1) + num = ((size + real_offset + pos + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS); p = grub_realloc (tmp_buf, num << GRUB_DISK_SECTOR_BITS); @@ -458,7 +458,7 @@ grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector, goto finish; } - grub_memcpy (buf, tmp_buf + real_offset, size); + grub_memcpy (buf, tmp_buf + pos + real_offset, size); /* Call the read hook, if any. */ if (disk->read_hook)