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.heemer...@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

Reply via email to