[syslinux] [PATCH 2/6] chain/partiter: fix possible non-NULL value returned by pi_begin() on error

Michal Soltys soltys at ziu.info
Sun Jun 29 12:41:39 PDT 2014


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.

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);
-- 
1.7.10.4



More information about the Syslinux mailing list