diff --git a/boot/pxe_parse.c b/boot/pxe_parse.c
index e5af05d4120..f6b7887f603 100644
--- a/boot/pxe_parse.c
+++ b/boot/pxe_parse.c
@@ -317,12 +317,13 @@ static int parse_sliteral(char **c, char **dst)
  */
 static int parse_fdtoverlays(char **c, struct alist *overlays)
 {
-	char *val;
+	char *val, *start;
 	int err;
 
 	err = parse_sliteral(c, &val);
 	if (err < 0)
 		return err;
+	start = val;
 
 	while (*val) {
 		struct pxe_fdtoverlay item;
@@ -348,10 +349,13 @@ static int parse_fdtoverlays(char **c, struct alist *overlays)
 
 		if (!item.path || !alist_add(overlays, item)) {
 			free(item.path);
+			free(start);
 			return -ENOMEM;
 		}
 	}
 
+	free(start);
+
 	return 1;
 }
 
