diff options
| author | Joe Hershberger <joe.hershberger@ni.com> | 2012-08-17 10:34:39 +0000 | 
|---|---|---|
| committer | Gerald Van Baren <gvb@unssw.com> | 2012-10-15 19:20:32 -0400 | 
| commit | 8ac88f2d2818c8efc1558626a4e7fb47dcc18987 (patch) | |
| tree | 928169789e6ea5816e500bab395e6fd5bd3051d7 | |
| parent | 8805beec8f51e861996860db71a831e4c263cf4c (diff) | |
| download | olio-uboot-2014.01-8ac88f2d2818c8efc1558626a4e7fb47dcc18987.tar.xz olio-uboot-2014.01-8ac88f2d2818c8efc1558626a4e7fb47dcc18987.zip | |
fdt: Check for a token to skip auto-hash validation
Allow the itb file to declare to u-boot that its hash should not be
checked automatically on bootm or iminfo.  This allows an image to
either be checked automatically or to include a script which may
check it otherwise (such as after part of the itb has been relocated
to RAM by the script).
Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
| -rw-r--r-- | common/image.c | 41 | ||||
| -rw-r--r-- | include/image.h | 4 | 
2 files changed, 45 insertions, 0 deletions
| diff --git a/common/image.c b/common/image.c index 852a96fab..750a98b6b 100644 --- a/common/image.c +++ b/common/image.c @@ -2496,6 +2496,36 @@ int fit_image_hash_get_value(const void *fit, int noffset, uint8_t **value,  	return 0;  } +#ifndef USE_HOSTCC +/** + * fit_image_hash_get_ignore - get hash ignore flag + * @fit: pointer to the FIT format image header + * @noffset: hash node offset + * @ignore: pointer to an int, will hold hash ignore flag + * + * fit_image_hash_get_ignore() finds hash ignore property in a given hash node. + * If the property is found and non-zero, the hash algorithm is not verified by + * u-boot automatically. + * + * returns: + *     0, on ignore not found + *     value, on ignore found + */ +int fit_image_hash_get_ignore(const void *fit, int noffset, int *ignore) +{ +	int len; +	int *value; + +	value = (int *)fdt_getprop(fit, noffset, FIT_IGNORE_PROP, &len); +	if (value == NULL || len != sizeof(int)) +		*ignore = 0; +	else +		*ignore = *value; + +	return 0; +} +#endif +  /**   * fit_set_timestamp - set node timestamp property   * @fit: pointer to the FIT format image header @@ -2759,6 +2789,9 @@ int fit_image_check_hashes(const void *fit, int image_noffset)  	char		*algo;  	uint8_t		*fit_value;  	int		fit_value_len; +#ifndef USE_HOSTCC +	int		ignore; +#endif  	uint8_t		value[FIT_MAX_HASH_LEN];  	int		value_len;  	int		noffset; @@ -2795,6 +2828,14 @@ int fit_image_check_hashes(const void *fit, int image_noffset)  			}  			printf("%s", algo); +#ifndef USE_HOSTCC +			fit_image_hash_get_ignore(fit, noffset, &ignore); +			if (ignore) { +				printf("-skipped "); +				continue; +			} +#endif +  			if (fit_image_hash_get_value(fit, noffset, &fit_value,  							&fit_value_len)) {  				err_msg = " error!\nCan't get hash value " diff --git a/include/image.h b/include/image.h index e5f664929..4e5863ff7 100644 --- a/include/image.h +++ b/include/image.h @@ -511,6 +511,7 @@ static inline int image_check_target_arch(const image_header_t *hdr)  #define FIT_HASH_NODENAME	"hash"  #define FIT_ALGO_PROP		"algo"  #define FIT_VALUE_PROP		"value" +#define FIT_IGNORE_PROP		"uboot-ignore"  /* image node */  #define FIT_DATA_PROP		"data" @@ -595,6 +596,9 @@ int fit_image_get_data(const void *fit, int noffset,  int fit_image_hash_get_algo(const void *fit, int noffset, char **algo);  int fit_image_hash_get_value(const void *fit, int noffset, uint8_t **value,  				int *value_len); +#ifndef USE_HOSTCC +int fit_image_hash_get_ignore(const void *fit, int noffset, int *ignore); +#endif  int fit_set_timestamp(void *fit, int noffset, time_t timestamp);  int fit_set_hashes(void *fit); |