+2009-03-29 Vladimir Serbinenko <phcoder@gmail.com>
+
+ Leak fixes
+
+ * kern/disk.c (grub_disk_cache_store): Invalidate previous cache
+ in case of collision
+ * disk/scsi.c (grub_scsi_open): free scsi in case of error
+
2009-03-29 Robert Millan <rmh@aybabtu.com>
* loader/i386/linux.c (grub_cmd_linux): Parse "vga=" parameter and
scsi->name = grub_strdup (name);
if (! scsi->name)
{
+ grub_free (scsi);
return grub_errno;
}
err = grub_scsi_inquiry (scsi);
if (err)
{
+ grub_free (scsi);
grub_dprintf ("scsi", "inquiry failed\n");
return grub_errno;
}
if (scsi->devtype != grub_scsi_devtype_direct
&& scsi->devtype != grub_scsi_devtype_cdrom)
{
+ grub_free (scsi);
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
"unknown SCSI device");
}
err = grub_scsi_read_capacity (scsi);
if (err)
{
+ grub_free (scsi);
grub_dprintf ("scsi", "READ CAPACITY failed\n");
return grub_errno;
}
}
}
+ grub_free (scsi);
+
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a SCSI disk");
}
unsigned index;
struct grub_disk_cache *cache;
- grub_disk_cache_invalidate (dev_id, disk_id, sector);
-
index = grub_disk_cache_get_index (dev_id, disk_id, sector);
cache = grub_disk_cache_table + index;
+
+ cache->lock = 1;
+ grub_free (cache->data);
+ cache->data = 0;
+ cache->lock = 0;
cache->data = grub_malloc (GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS);
if (! cache->data)