Skip to content

Commit

Permalink
fdt: Fix FIT header verification in mkimage and conduct same checks a…
Browse files Browse the repository at this point in the history
…s bootm

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 <[email protected]>
  • Loading branch information
jhand2 authored and trini committed Mar 8, 2019
1 parent 280faff commit d32aa3c
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 3 deletions.
5 changes: 4 additions & 1 deletion tools/fit_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 EXIT_FAILURE;

return EXIT_SUCCESS;
}

int fit_check_image_types(uint8_t type)
Expand Down
8 changes: 8 additions & 0 deletions tools/fit_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@
#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);

Expand Down
34 changes: 33 additions & 1 deletion tools/imagetool.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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,
Expand Down
19 changes: 19 additions & 0 deletions tools/imagetool.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion tools/mkimage.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit d32aa3c

Please sign in to comment.