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

Nicolas Heemeryck nicolas.heemeryck at gmail.com
Wed Apr 20 23:58:39 CEST 2022


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 at gmail.com>
---
 tools/imagetool.c | 40 +++++++++++++++++++++++-----------------
 1 file changed, 23 insertions(+), 17 deletions(-)

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;
-- 
2.32.0



More information about the U-Boot mailing list