[U-Boot] [PATCH] fdt: Fix FIT header verification in mkimage and conduct same checks as bootm V2

Jordan Hand jordanhand22 at gmail.com
Tue Feb 19 23:52:12 UTC 2019


Signed-off-by: Jordan Hand <jorhand at microsoft.com>
---
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.

I accidentally sent from an email that wasn't subscribed to the mailing
list so posting to the list didn't work. Apologies for the clutter for
all those who are CC'd.

 tools/fit_common.c |  5 ++++-
 tools/imagetool.c  | 31 +++++++++++++++++++++++++++++++
 tools/imagetool.h  | 15 +++++++++++++++
 tools/mkimage.c    |  2 +-
 4 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/tools/fit_common.c b/tools/fit_common.c
index d96085eaad..622a9e2a21 100644
--- a/tools/fit_common.c
+++ b/tools/fit_common.c
@@ -26,7 +26,10 @@
 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 -FDT_ERR_BADSTRUCTURE;
+
+	return EXIT_SUCCESS;
 }
 
 int fit_check_image_types(uint8_t type)
diff --git a/tools/imagetool.c b/tools/imagetool.c
index b3e628f612..42c6a73925 100644
--- a/tools/imagetool.c
+++ b/tools/imagetool.c
@@ -65,6 +65,37 @@ 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 = 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,
diff --git a/tools/imagetool.h b/tools/imagetool.h
index 71471420f9..81f2f60727 100644
--- a/tools/imagetool.h
+++ b/tools/imagetool.h
@@ -179,6 +179,21 @@ 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.
+ *
+ * @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
diff --git a/tools/mkimage.c b/tools/mkimage.c
index ea5ed542ab..2899adff81 100644
--- a/tools/mkimage.c
+++ b/tools/mkimage.c
@@ -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);
-- 
2.17.1



More information about the U-Boot mailing list