tools/imagetool: Fix segfault when tparams->verify_header is NULL
authorNicolas Heemeryck <nicolas.heemeryck@gmail.com>
Wed, 20 Apr 2022 21:58:39 +0000 (23:58 +0200)
committerTom Rini <trini@konsulko.com>
Thu, 5 May 2022 19:06:02 +0000 (15:06 -0400)
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>
tools/imagetool.c

index 5ad6d74..f14ca2f 100644 (file)
@@ -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;