From 7262eca1e39526a5a80d893ee0c5903eeffd1a2b Mon Sep 17 00:00:00 2001 From: jeroen Date: Fri, 18 May 2007 21:40:06 +0000 Subject: [PATCH] 2007-05-18 Jeroen Dekkers * kern/disk.c (grub_disk_read): Check return value of grub_realloc(). --- ChangeLog | 5 +++++ kern/disk.c | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index c453fc36e..c4638521c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-05-18 Jeroen Dekkers + + * kern/disk.c (grub_disk_read): Check return value of + grub_realloc(). + 2007-05-18 Jeroen Dekkers * util/getroot.c (grub_util_get_grub_dev): Support partitionable diff --git a/kern/disk.c b/kern/disk.c index 4ac123f92..e80ad54a0 100644 --- a/kern/disk.c +++ b/kern/disk.c @@ -409,13 +409,19 @@ grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector, { /* Uggh... Failed. Instead, just read necessary data. */ unsigned num; + char *p; grub_errno = GRUB_ERR_NONE; num = ((size + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS); - tmp_buf = grub_realloc (tmp_buf, num << GRUB_DISK_SECTOR_BITS); + p = grub_realloc (tmp_buf, num << GRUB_DISK_SECTOR_BITS); + if (!p) + goto finish; + + tmp_buf = p; + if ((disk->dev->read) (disk, sector, num, tmp_buf)) { grub_error_push ();