From: Jim Meyering Date: Thu, 22 Oct 2009 19:46:00 +0000 (+0200) Subject: gpt: don't dereference NULL upon OOM (pth_get_raw callers) X-Git-Tag: android-x86-4.4-r1~584 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=4cd245937c8b8287133d82d6e48cecd6459873d3;p=android-x86%2Fexternal-parted.git gpt: don't dereference NULL upon OOM (pth_get_raw callers) Handle each case in which pth_get_raw may return NULL. * libparted/labels/gpt.c (pth_get_raw): Upon OOM error, return 0 rather than dereferencing NULL. (gpt_write): Don't dereference NULL upon OOM error. (gpt_read): Yet another. --- diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c index df83dd8..e3aec0c 100644 --- a/libparted/labels/gpt.c +++ b/libparted/labels/gpt.c @@ -397,6 +397,8 @@ pth_crc32 (const PedDevice *dev, const GuidPartitionTableHeader_t *pth) PED_ASSERT (pth != NULL, return 0); uint8_t *pth_raw = pth_get_raw (dev, pth); + if (pth_raw == NULL) + return 0; uint32_t crc32 = efi_crc32 (pth_raw, PED_LE32_TO_CPU (pth->HeaderSize)); free (pth_raw); @@ -968,6 +970,8 @@ gpt_read (PedDisk *disk) if (xalloc_oversized (ptes_sectors, disk->dev->sector_size)) goto error_free_gpt; ptes = ped_malloc (ptes_sectors * disk->dev->sector_size); + if (ptes == NULL) + goto error_free_gpt; if (!ped_device_read (disk->dev, ptes, PED_LE64_TO_CPU (gpt->PartitionEntryLBA), @@ -1172,7 +1176,8 @@ gpt_write (const PedDisk *disk) /* Write PTH and PTEs */ _generate_header (disk, 0, ptes_crc, &gpt); - pth_raw = pth_get_raw (disk->dev, gpt); + if ((pth_raw = pth_get_raw (disk->dev, gpt)) == NULL) + goto error_free_ptes; pth_free (gpt); bool write_ok = ped_device_write (disk->dev, pth_raw, 1, 1); free (pth_raw); @@ -1184,7 +1189,8 @@ gpt_write (const PedDisk *disk) /* Write Alternate PTH & PTEs */ _generate_header (disk, 1, ptes_crc, &gpt); - pth_raw = pth_get_raw (disk->dev, gpt); + if ((pth_raw = pth_get_raw (disk->dev, gpt)) == NULL) + goto error_free_ptes; pth_free (gpt); write_ok = ped_device_write (disk->dev, pth_raw, disk->dev->length - 1, 1); free (pth_raw);