On 09/09/10 01:20, Robert Millan wrote:
It seems we have a ton of double-free bugs in label() and
uuid() routines.

Take for example grub_ext2_label():

   data = grub_ext2_mount (disk);
   if (data)
     *label = grub_strndup (data->sblock.volume_name, 14);
   else
     *label = NULL;
   grub_free (data);

If grub_ext2_mount fails, data is not allocated but we free it anyway.

Or perhaps I'm missing something? (it's late here, I need some sleep)

grub_free (NULL) is a no-op on purpose:
/* Deallocate the pointer PTR.  */
void
grub_free (void *ptr)
{
  grub_mm_header_t p;
  grub_mm_region_t r;

  if (! ptr)
    return;



--
Regards
Vladimir 'φ-coder/phcoder' Serbinenko


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to