[syslinux:master] chain/partiter: fix possible non-NULL value returned by pi_begin() on error
syslinux-bot for Michal Soltys
soltys at ziu.info
Tue Aug 26 19:00:08 PDT 2014
Commit-ID: 9cffba471b6a41f363abc68509f112d9a85c4872
Gitweb: http://www.syslinux.org/commit/9cffba471b6a41f363abc68509f112d9a85c4872
Author: Michal Soltys <soltys at ziu.info>
AuthorDate: Sun, 29 Jun 2014 21:41:39 +0200
Committer: H. Peter Anvin <hpa at zytor.com>
CommitDate: Tue, 26 Aug 2014 18:07:17 -0700
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 at zytor.com>
---
com32/chain/partiter.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/com32/chain/partiter.c b/com32/chain/partiter.c
index ee19e8b..5c5b015 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);
More information about the Syslinux-commits
mailing list