From: Nicolas Heemeryck <nicolas.heemeryck@gmail.com>
Date: Wed, 20 Apr 2022 21:58:39 +0000 (+0200)
Subject: tools/imagetool: Fix segfault when tparams->verify_header is NULL
X-Git-Tag: v2025.01-rc5-pxa1908~1416^2~11
X-Git-Url: http://git.dujemihanovic.xyz/img/sics.gif?a=commitdiff_plain;h=30705cd89271ea05ff6c65552af3dc4f0680a03c;p=u-boot.git

tools/imagetool: Fix segfault when tparams->verify_header is NULL

On some image types like i.MX8 and i.MX8M, the verify_header function
is not implemented.

Before this commit, no check on tparams->verify_header was done causing
a segfault if NULL. Now, a proper error message is printed.

Signed-off-by: Nicolas Heemeryck <nicolas.heemeryck@gmail.com>
---

diff --git a/tools/imagetool.c b/tools/imagetool.c
index 5ad6d7413f..f14ca2fb97 100644
--- a/tools/imagetool.c
+++ b/tools/imagetool.c
@@ -80,27 +80,33 @@ static int imagetool_verify_print_header_by_type(
 	struct image_type_params *tparams,
 	struct image_tool_params *params)
 {
-	int retval;
-
-	retval = tparams->verify_header((unsigned char *)ptr, sbuf->st_size,
-			params);
-
-	if (retval == 0) {
-		/*
-		 * Print the image information if verify is successful
-		 */
-		if (tparams->print_header) {
-			if (!params->quiet)
-				tparams->print_header(ptr);
+	int retval = -1;
+
+	if (tparams->verify_header) {
+		retval = tparams->verify_header((unsigned char *)ptr,
+						sbuf->st_size, params);
+
+		if (retval == 0) {
+			/*
+			 * Print the image information if verify is successful
+			 */
+			if (tparams->print_header) {
+				if (!params->quiet)
+					tparams->print_header(ptr);
+			} else {
+				fprintf(stderr,
+					"%s: print_header undefined for %s\n",
+					params->cmdname, tparams->name);
+			}
 		} else {
 			fprintf(stderr,
-				"%s: print_header undefined for %s\n",
-				params->cmdname, tparams->name);
+				"%s: verify_header failed for %s with exit code %d\n",
+				params->cmdname, tparams->name, retval);
 		}
+
 	} else {
-		fprintf(stderr,
-			"%s: verify_header failed for %s with exit code %d\n",
-			params->cmdname, tparams->name, retval);
+		fprintf(stderr, "%s: print_header undefined for %s\n",
+			params->cmdname, tparams->name);
 	}
 
 	return retval;