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:
phcoder 2009-03-29 21:21:19 +00:00
parent 9c323f0961
commit a8c48fd53d
3 changed files with 19 additions and 2 deletions

View file

@ -255,6 +255,7 @@ grub_scsi_open (const char *name, grub_disk_t disk)
scsi->name = grub_strdup (name);
if (! scsi->name)
{
grub_free (scsi);
return grub_errno;
}
@ -263,6 +264,7 @@ grub_scsi_open (const char *name, grub_disk_t disk)
err = grub_scsi_inquiry (scsi);
if (err)
{
grub_free (scsi);
grub_dprintf ("scsi", "inquiry failed\n");
return grub_errno;
}
@ -275,6 +277,7 @@ grub_scsi_open (const char *name, grub_disk_t disk)
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");
}
@ -287,6 +290,7 @@ grub_scsi_open (const char *name, grub_disk_t disk)
err = grub_scsi_read_capacity (scsi);
if (err)
{
grub_free (scsi);
grub_dprintf ("scsi", "READ CAPACITY failed\n");
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");
}