From 4cd245937c8b8287133d82d6e48cecd6459873d3 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Thu, 22 Oct 2009 21:46:00 +0200 Subject: [PATCH] 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. --- libparted/labels/gpt.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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); -- 2.11.0