rather than the file it points to. This fixes use of freed memory
if an existing loopback device is replaced.
* grub-core/disk/loopback.c (grub_loopback_open): Store dev in
disk->data, not dev->file.
(grub_loopback_read): Adjust file assignment to match.
Fixes Ubuntu bug #742967.
+2011-04-01 Colin Watson <cjwatson@ubuntu.com>
+
+ Store the loopback device as data on loopback grub_disk structures,
+ rather than the file it points to. This fixes use of freed memory
+ if an existing loopback device is replaced.
+
+ * grub-core/disk/loopback.c (grub_loopback_open): Store dev in
+ disk->data, not dev->file.
+ (grub_loopback_read): Adjust file assignment to match.
+ Fixes Ubuntu bug #742967.
+
2011-04-01 Colin Watson <cjwatson@ubuntu.com>
* grub-core/disk/loopback.c (grub_cmd_loopback): Fix a memory leak
disk->total_sectors = GRUB_DISK_SIZE_UNKNOWN;
disk->id = (unsigned long) dev;
- disk->data = dev->file;
+ disk->data = dev;
return 0;
}
grub_loopback_read (grub_disk_t disk, grub_disk_addr_t sector,
grub_size_t size, char *buf)
{
- grub_file_t file = (grub_file_t) disk->data;
+ grub_file_t file = ((struct grub_loopback *) disk->data)->file;
grub_off_t pos;
grub_file_seek (file, sector << GRUB_DISK_SECTOR_BITS);