[U-Boot] [PATCH] Fix hash verification

Simon Glass sjg at chromium.org
Tue Dec 16 23:02:40 CET 2014


Hi Nikolay,

On 12 December 2014 at 11:01,  <picmaster at mail.bg> wrote:
> From: Nikolay Dimitrov <picmaster at mail.bg>
>
> Fix issue in parse_verify_sum() which swaps handling of env-var and *address.
> Move hash_command() argc check earlier.
> Cosmetic change on do_hash() variable declaration.
> Improved help message for "hash" command.
>
> Signed-off-by: Nikolay Dimitrov <picmaster at mail.bg>

Thanks for this. Main change looks good, a few nits.

> ---
>  common/cmd_hash.c |   28 +++++++++++++---------------
>  common/hash.c     |    6 ++----
>  2 files changed, 15 insertions(+), 19 deletions(-)
>
> diff --git a/common/cmd_hash.c b/common/cmd_hash.c
> index 90facbb..704d21e 100644
> --- a/common/cmd_hash.c
> +++ b/common/cmd_hash.c
> @@ -18,9 +18,9 @@
>  static int do_hash(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>  {
>         char *s;
> -#ifdef CONFIG_HASH_VERIFY
>         int flags = HASH_FLAG_ENV;
>
> +#ifdef CONFIG_HASH_VERIFY
>         if (argc < 4)
>                 return CMD_RET_USAGE;
>         if (!strcmp(argv[1], "-v")) {
> @@ -28,8 +28,6 @@ static int do_hash(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>                 argc--;
>                 argv++;
>         }
> -#else
> -       const int flags = HASH_FLAG_ENV;
>  #endif
>         /* Move forward to 'algorithm' parameter */
>         argc--;
> @@ -40,19 +38,19 @@ static int do_hash(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>  }
>
>  #ifdef CONFIG_HASH_VERIFY
> -U_BOOT_CMD(
> -       hash,   6,      1,      do_hash,
> -       "compute hash message digest",
> -       "algorithm address count [[*]sum_dest]\n"
> -               "    - compute message digest [save to env var / *address]\n"
> -       "hash -v algorithm address count [*]sum\n"
> -               "    - verify hash of memory area with env var / *address"
> -);
> +#define HARGS 6
>  #else
> +#define HARGS 5
> +#endif
> +
>  U_BOOT_CMD(
> -       hash,   5,      1,      do_hash,
> -       "compute message digest",
> -       "algorithm address count [[*]sum_dest]\n"
> +       hash,   HARGS,  1,      do_hash,
> +       "compute hash message digest",
> +       "algorithm address count [[*]hash_dest]\n"
>                 "    - compute message digest [save to env var / *address]"
> -);
> +#ifdef CONFIG_HASH_VERIFY
> +       "\nhash -v algorithm address count [*]hash\n"
> +               "    - verify message digest of memory area to immediate value, \n"

Perhaps " verify message digest of memory area, display result or
write to env var or *address"

>  #endif
> +);
> diff --git a/common/hash.c b/common/hash.c
> index 12d6759..aceabc5 100644
> --- a/common/hash.c
> +++ b/common/hash.c
> @@ -256,7 +256,7 @@ static int parse_verify_sum(struct hash_algo *algo, char *verify_str,
>                         env_var = 1;
>         }
>
> -       if (env_var) {
> +       if (!env_var) {
>                 ulong addr;
>                 void *buf;
>
> @@ -347,7 +347,7 @@ int hash_command(const char *algo_name, int flags, cmd_tbl_t *cmdtp, int flag,
>  {
>         ulong addr, len;
>
> -       if (argc < 2)
> +       if ((argc < 2) || ((flags & HASH_FLAG_VERIFY) && (argc < 3)))
>                 return CMD_RET_USAGE;
>
>         addr = simple_strtoul(*argv++, NULL, 16);
> @@ -380,8 +380,6 @@ int hash_command(const char *algo_name, int flags, cmd_tbl_t *cmdtp, int flag,
>  #else
>                 if (0) {
>  #endif
> -                       if (!argc)
> -                               return CMD_RET_USAGE;

What does this change achieve?

>                         if (parse_verify_sum(algo, *argv, vsum,
>                                         flags & HASH_FLAG_ENV)) {
>                                 printf("ERROR: %s does not contain a valid "
> --
> 1.7.10.4
>

Regards,
Simon


More information about the U-Boot mailing list