Fix hash verification
authorNikolay Dimitrov <picmaster@mail.bg>
Fri, 12 Dec 2014 18:01:23 +0000 (20:01 +0200)
committerTom Rini <trini@ti.com>
Mon, 29 Dec 2014 21:31:24 +0000 (16:31 -0500)
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@mail.bg>
Reviewed-by: Simon Glass <sjg@chromium.org>
common/cmd_hash.c
common/hash.c

index 90facbbe1ac9d5c5113e92f3c34a8972fe6d1481..704d21ec6d0d8fbf5c2f29f350679697b47cace2 100644 (file)
@@ -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"
+               "      env var or *address"
 #endif
+);
index 12d67594abe0c6f912f5dcd80f5b0f4d1c3cd867..aceabc5caddb12d1c52d9b4c4028981ff01670b0 100644 (file)
@@ -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;
                        if (parse_verify_sum(algo, *argv, vsum,
                                        flags & HASH_FLAG_ENV)) {
                                printf("ERROR: %s does not contain a valid "