[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