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
This commit is contained in:
parent
9c323f0961
commit
a8c48fd53d
3 changed files with 19 additions and 2 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
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>
|
2009-03-29 Robert Millan <rmh@aybabtu.com>
|
||||||
|
|
||||||
* loader/i386/linux.c (grub_cmd_linux): Parse "vga=" parameter and
|
* loader/i386/linux.c (grub_cmd_linux): Parse "vga=" parameter and
|
||||||
|
|
|
@ -255,6 +255,7 @@ grub_scsi_open (const char *name, grub_disk_t disk)
|
||||||
scsi->name = grub_strdup (name);
|
scsi->name = grub_strdup (name);
|
||||||
if (! scsi->name)
|
if (! scsi->name)
|
||||||
{
|
{
|
||||||
|
grub_free (scsi);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,6 +264,7 @@ grub_scsi_open (const char *name, grub_disk_t disk)
|
||||||
err = grub_scsi_inquiry (scsi);
|
err = grub_scsi_inquiry (scsi);
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
|
grub_free (scsi);
|
||||||
grub_dprintf ("scsi", "inquiry failed\n");
|
grub_dprintf ("scsi", "inquiry failed\n");
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
@ -275,6 +277,7 @@ grub_scsi_open (const char *name, grub_disk_t disk)
|
||||||
if (scsi->devtype != grub_scsi_devtype_direct
|
if (scsi->devtype != grub_scsi_devtype_direct
|
||||||
&& scsi->devtype != grub_scsi_devtype_cdrom)
|
&& scsi->devtype != grub_scsi_devtype_cdrom)
|
||||||
{
|
{
|
||||||
|
grub_free (scsi);
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
||||||
"unknown SCSI device");
|
"unknown SCSI device");
|
||||||
}
|
}
|
||||||
|
@ -287,6 +290,7 @@ grub_scsi_open (const char *name, grub_disk_t disk)
|
||||||
err = grub_scsi_read_capacity (scsi);
|
err = grub_scsi_read_capacity (scsi);
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
|
grub_free (scsi);
|
||||||
grub_dprintf ("scsi", "READ CAPACITY failed\n");
|
grub_dprintf ("scsi", "READ CAPACITY failed\n");
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
@ -303,6 +307,8 @@ grub_scsi_open (const char *name, grub_disk_t disk)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_free (scsi);
|
||||||
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a SCSI disk");
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a SCSI disk");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -158,11 +158,14 @@ grub_disk_cache_store (unsigned long dev_id, unsigned long disk_id,
|
||||||
unsigned index;
|
unsigned index;
|
||||||
struct grub_disk_cache *cache;
|
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);
|
index = grub_disk_cache_get_index (dev_id, disk_id, sector);
|
||||||
cache = grub_disk_cache_table + index;
|
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);
|
cache->data = grub_malloc (GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS);
|
||||||
if (! cache->data)
|
if (! cache->data)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
Loading…
Reference in a new issue