[U-Boot] [PATCH 1/5] tools/env: make env_aes_cbc_crypt re-entrant

Stefano Babic sbabic at denx.de
Wed Apr 6 13:29:07 CEST 2016


Hi Andreas,

thanks for fixing this:

On 05/04/2016 23:13, Andreas Fenkart wrote:
> Signed-off-by: Andreas Fenkart <andreas.fenkart at digitalstrom.com>
> ---
>  tools/env/fw_env.c | 17 +++++++++++------
>  1 file changed, 11 insertions(+), 6 deletions(-)
> 
> diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
> index 1420ac5..c362a41 100644
> --- a/tools/env/fw_env.c
> +++ b/tools/env/fw_env.c
> @@ -106,7 +106,8 @@ static struct environment environment = {
>  	.flag_scheme = FLAG_NONE,
>  };
>  
> -static int env_aes_cbc_crypt(char *data, const int enc);
> +static int env_aes_cbc_crypt(char *data, const int enc,
> +			     uint8_t key[AES_KEY_LENGTH]);
>  

Formally, is it not simply as pointer ?

static int env_aes_cbc_crypt(char *data, const int enc,
		     uint8_t *key);


>  static int HaveRedundEnv = 0;
>  
> @@ -304,7 +305,8 @@ int fw_env_close(void)
>  {
>  	int ret;
>  	if (common_args.aes_flag) {
> -		ret = env_aes_cbc_crypt(environment.data, 1);
> +		ret = env_aes_cbc_crypt(environment.data, 1,
> +					common_args.aes_key);
>  		if (ret) {
>  			fprintf(stderr,
>  				"Error: can't encrypt env for flash\n");
> @@ -949,7 +951,8 @@ static int flash_flag_obsolete (int dev, int fd, off_t offset)
>  }
>  
>  /* Encrypt or decrypt the environment before writing or reading it. */
> -static int env_aes_cbc_crypt(char *payload, const int enc)
> +static int env_aes_cbc_crypt(char *payload, const int enc,
> +			     uint8_t key[AES_KEY_LENGTH])

Ditto.

>  {
>  	uint8_t *data = (uint8_t *)payload;
>  	const int len = getenvsize();
> @@ -957,7 +960,7 @@ static int env_aes_cbc_crypt(char *payload, const int enc)
>  	uint32_t aes_blocks;
>  
>  	/* First we expand the key. */
> -	aes_expand_key(common_args.aes_key, key_exp);
> +	aes_expand_key(key, key_exp);
>  
>  	/* Calculate the number of AES blocks to encrypt. */
>  	aes_blocks = DIV_ROUND_UP(len, AES_KEY_LENGTH);
> @@ -1186,7 +1189,8 @@ int fw_env_open(void)
>  	crc0 = crc32 (0, (uint8_t *) environment.data, ENV_SIZE);
>  
>  	if (common_args.aes_flag) {
> -		ret = env_aes_cbc_crypt(environment.data, 0);
> +		ret = env_aes_cbc_crypt(environment.data, 0,
> +					common_args.aes_key);
>  		if (ret)
>  			return ret;
>  	}
> @@ -1243,7 +1247,8 @@ int fw_env_open(void)
>  		crc1 = crc32 (0, (uint8_t *) redundant->data, ENV_SIZE);
>  
>  		if (common_args.aes_flag) {
> -			ret = env_aes_cbc_crypt(redundant->data, 0);
> +			ret = env_aes_cbc_crypt(redundant->data, 0,
> +						common_args.aes_key);
>  			if (ret)
>  				return ret;
>  		}
> 


Regards,
Stefano

-- 
=====================================================================
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================


More information about the U-Boot mailing list