aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Soltys <soltys@ziu.info>2014-06-29 21:41:39 +0200
committerH. Peter Anvin <hpa@zytor.com>2014-08-26 18:07:17 -0700
commit9cffba471b6a41f363abc68509f112d9a85c4872 (patch)
treeb7ad6530760e8123b8deac2dce9b55c0631ef7d0
parentf964a9772fb580d373b5b3da88f649f50d575a5a (diff)
downloadsyslinux-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.c18
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);