diff --git a/tools/zynqimage.c b/tools/zynqimage.c
index b47132b02a60f4441bcf1205213da6a08324163f..021d2d3fc91f0ae515b160b33a56a8872fd5dda2 100644
--- a/tools/zynqimage.c
+++ b/tools/zynqimage.c
@@ -239,11 +239,15 @@ static void zynqimage_parse_initparams(struct zynq_header *zynqhdr,
 	}
 
 	err = fstat(fileno(fp), &path_stat);
-	if (err)
+	if (err) {
+		fclose(fp);
 		return;
+	}
 
-	if (!S_ISREG(path_stat.st_mode))
+	if (!S_ISREG(path_stat.st_mode)) {
+		fclose(fp);
 		return;
+	}
 
 	do {
 		r = fscanf(fp, "%x %x", &reginit.address, &reginit.data);
diff --git a/tools/zynqmpimage.c b/tools/zynqmpimage.c
index 60d8ed23b4a1ca1eda75a261e391578e931e958e..0c9a3daddd6a9a6e14586fe1092f1203b151072e 100644
--- a/tools/zynqmpimage.c
+++ b/tools/zynqmpimage.c
@@ -251,11 +251,15 @@ static void zynqmpimage_parse_initparams(struct zynqmp_header *zynqhdr,
 	}
 
 	err = fstat(fileno(fp), &path_stat);
-	if (err)
+	if (err) {
+		fclose(fp);
 		return;
+	}
 
-	if (!S_ISREG(path_stat.st_mode))
+	if (!S_ISREG(path_stat.st_mode)) {
+		fclose(fp);
 		return;
+	}
 
 	do {
 		r = fscanf(fp, "%x %x", &reginit.address, &reginit.data);