diff options
author | Michal Soltys <soltys@ziu.info> | 2014-06-29 21:41:39 +0200 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2014-08-26 18:07:17 -0700 |
commit | 9cffba471b6a41f363abc68509f112d9a85c4872 (patch) | |
tree | b7ad6530760e8123b8deac2dce9b55c0631ef7d0 | |
parent | f964a9772fb580d373b5b3da88f649f50d575a5a (diff) | |
download | syslinux-9cffba471b6a41f363abc68509f112d9a85c4872.tar.gz syslinux-9cffba471b6a41f363abc68509f112d9a85c4872.tar.xz syslinux-9cffba471b6a41f363abc68509f112d9a85c4872.zip |
chain/partiter: fix possible non-NULL value returned by pi_begin() on error
This patch fixes non-NULL value returned from pi_begin() in case of an
error (which resulted in further hang instead of proper exit). Probably
a leftover from pi_dealloc() times.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r-- | com32/chain/partiter.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/com32/chain/partiter.c b/com32/chain/partiter.c index ee19e8be..5c5b015b 100644 --- a/com32/chain/partiter.c +++ b/com32/chain/partiter.c @@ -637,12 +637,12 @@ struct part_iter *pi_begin(const struct disk_info *di, int flags) /* Preallocate iterator */ if (!(iter = pi_alloc())) - goto bail; + goto out; /* Read MBR */ if (!(mbr = disk_read_sectors(di, 0, 1))) { error("Unable to read the first disk sector."); - goto bail; + goto out; } /* Check for MBR magic */ @@ -650,7 +650,7 @@ struct part_iter *pi_begin(const struct disk_info *di, int flags) warn("No MBR magic, treating disk as raw."); /* looks like RAW */ ret = pi_ctor(iter, di, flags); - goto bail; + goto out; } /* Check for GPT protective MBR */ @@ -668,7 +668,7 @@ struct part_iter *pi_begin(const struct disk_info *di, int flags) */ gpth = try_gpt_hdr(di, 1); if (!gpth) - goto bail; + goto out; } if (gpth && gpth->rev.uint32 == 0x00010000 && @@ -680,14 +680,14 @@ struct part_iter *pi_begin(const struct disk_info *di, int flags) #endif if (notsane_gpt_hdr(di, gpth, flags)) { error("GPT header values are corrupted."); - goto bail; + goto out; } gptl = try_gpt_list(di, gpth, 0); if (!gptl) gptl = try_gpt_list(di, gpth, 1); if (!gptl) - goto bail; + goto out; /* looks like GPT */ ret = pi_gpt_ctor(iter, di, flags, gpth, gptl); @@ -695,9 +695,11 @@ struct part_iter *pi_begin(const struct disk_info *di, int flags) /* looks like MBR */ ret = pi_dos_ctor(iter, di, flags, mbr); } -bail: - if (ret < 0) +out: + if (ret < 0) { free(iter); + iter = NULL; + } free(mbr); free(gpth); free(gptl); |