fdt: Fix FIT header verification in mkimage and conduct same checks as bootm
authorJordan Hand <jordanhand22@gmail.com>
Tue, 5 Mar 2019 22:47:56 +0000 (14:47 -0800)
committerTom Rini <trini@konsulko.com>
Fri, 8 Mar 2019 16:31:44 +0000 (11:31 -0500)
FIT header verification in mkimage was treating a return code as a boolean,
which meant that failures in validating the fit were seen as successes.

Additionally, mkimage was checking all formats to find a header which
passes validation, rather than using the image type specified to
mkimage.

checkpatch.pl checks for lines ending with '(' and alignment matching
open parentheses are ignored to keep with existing coding style.

Signed-off-by: Jordan Hand <jorhand@microsoft.com>
tools/fit_common.c
tools/fit_common.h
tools/imagetool.c
tools/imagetool.h
tools/mkimage.c

index d96085eaad3278fc443ffbac7b2bda3bc98c6038..9506390214ce028bbe0045d88161538ec652da2d 100644 (file)
 int fit_verify_header(unsigned char *ptr, int image_size,
                        struct image_tool_params *params)
 {
-       return fdt_check_header(ptr);
+       if (fdt_check_header(ptr) != EXIT_SUCCESS || !fit_check_format(ptr))
+               return EXIT_FAILURE;
+
+       return EXIT_SUCCESS;
 }
 
 int fit_check_image_types(uint8_t type)
index 71e792e3c489d9e48d8eaabb943f58c0aa08ef13..9e09624f64eea18989d3cfc0f5d96f985ee70dbd 100644 (file)
 #include "mkimage.h"
 #include <image.h>
 
+/**
+ * Verify the format of FIT header pointed to by ptr
+ *
+ * @ptr: image header to be verified
+ * @image_size: size of while image
+ * @params: mkimage parameters
+ * @return 0 if OK, -1 on error
+ */
 int fit_verify_header(unsigned char *ptr, int image_size,
                        struct image_tool_params *params);
 
index b3e628f612f527f7a3ed11afb7c57395ae6a6bab..ba1f64aa377a7f048a987e952a3721f81c240b11 100644 (file)
@@ -46,7 +46,7 @@ int imagetool_verify_print_header(
 
                        if (retval == 0) {
                                /*
-                                * Print the image information  if verify is
+                                * Print the image information if verify is
                                 * successful
                                 */
                                if ((*curr)->print_header) {
@@ -65,6 +65,38 @@ int imagetool_verify_print_header(
        return retval;
 }
 
+int imagetool_verify_print_header_by_type(
+       void *ptr,
+       struct stat *sbuf,
+       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);
+               } else {
+                       fprintf(stderr,
+                               "%s: print_header undefined for %s\n",
+                               params->cmdname, tparams->name);
+               }
+       } else {
+               fprintf(stderr,
+                       "%s: verify_header failed for %s with exit code %d\n",
+                       params->cmdname, tparams->name, retval);
+       }
+
+       return retval;
+}
+
 int imagetool_save_subimage(
        const char *file_name,
        ulong file_data,
index 71471420f9c4e218337ff0ee51514607274c816f..2689a4004a7ac7667948f33f61e4aa071ee19831 100644 (file)
@@ -179,6 +179,25 @@ int imagetool_verify_print_header(
        struct image_type_params *tparams,
        struct image_tool_params *params);
 
+/*
+ * imagetool_verify_print_header_by_type() - verifies the image header
+ *
+ * Verify the image_header for the image type given by tparams.
+ * If verification is successful, this prints the respective header.
+ * @ptr: pointer the the image header
+ * @sbuf: stat information about the file pointed to by ptr
+ * @tparams: image type parameters
+ * @params: mkimage parameters
+ *
+ * @return 0 on success, negative if input image format does not match with
+ * the given image type
+ */
+int imagetool_verify_print_header_by_type(
+       void *ptr,
+       struct stat *sbuf,
+       struct image_type_params *tparams,
+       struct image_tool_params *params);
+
 /**
  * imagetool_save_subimage - store data into a file
  * @file_name: name of the destination file
index ea5ed542ab9c120776be927c8b66601562a55758..2899adff81079e4a92edfe454e88c92d159d2e7a 100644 (file)
@@ -409,7 +409,7 @@ int main(int argc, char **argv)
                 * Print the image information for matched image type
                 * Returns the error code if not matched
                 */
-               retval = imagetool_verify_print_header(ptr, &sbuf,
+               retval = imagetool_verify_print_header_by_type(ptr, &sbuf,
                                tparams, &params);
 
                (void) munmap((void *)ptr, sbuf.st_size);