diff --git a/tools/fit_image.c b/tools/fit_image.c
index 8d58370d87fc945b291c50b154900ed4834f75b6..bfb43b2e59f693c38f3831ef290b8ebc4138813b 100644
--- a/tools/fit_image.c
+++ b/tools/fit_image.c
@@ -385,7 +385,7 @@ static int fit_extract_data(struct image_tool_params *params, const char *fname)
 	buf = malloc(fit_size);
 	if (!buf) {
 		ret = -ENOMEM;
-		goto err;
+		goto err_munmap;
 	}
 	buf_ptr = 0;
 
@@ -393,7 +393,7 @@ static int fit_extract_data(struct image_tool_params *params, const char *fname)
 	if (images < 0) {
 		debug("%s: Cannot find /images node: %d\n", __func__, images);
 		ret = -EINVAL;
-		goto err;
+		goto err_munmap;
 	}
 
 	for (node = fdt_first_subnode(fdt, images);
@@ -411,7 +411,7 @@ static int fit_extract_data(struct image_tool_params *params, const char *fname)
 		ret = fdt_delprop(fdt, node, "data");
 		if (ret) {
 			ret = -EPERM;
-			goto err;
+			goto err_munmap;
 		}
 		fdt_setprop_u32(fdt, node, "data-offset", buf_ptr);
 		fdt_setprop_u32(fdt, node, "data-size", len);
@@ -446,8 +446,11 @@ static int fit_extract_data(struct image_tool_params *params, const char *fname)
 		ret = -EIO;
 		goto err;
 	}
-	ret = 0;
+	close(fd);
+	return 0;
 
+err_munmap:
+	munmap(fdt, sbuf.st_size);
 err:
 	close(fd);
 	return ret;