From 30705cd89271ea05ff6c65552af3dc4f0680a03c Mon Sep 17 00:00:00 2001 From: Nicolas Heemeryck Date: Wed, 20 Apr 2022 23:58:39 +0200 Subject: [PATCH] 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 --- 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.39.5