diff options
author | Simon Glass <sjg@chromium.org> | 2013-02-24 17:33:31 +0000 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2013-02-28 19:49:13 -0800 |
commit | bd091b67d0ef2959ed0ff2aa6575ddb0d21c1f71 (patch) | |
tree | 0eb55b0c3adbc8fb1a6732188fc7ceb80d40be5f | |
parent | 5512d5b034d3f199f16f7c18171cae7732bb05eb (diff) |
sandbox: Allow hash functions to work correctly
Use map_sysmem() so that hashing is possible on sandbox.
Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r-- | common/hash.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/common/hash.c b/common/hash.c index ef6fe375d28..0d04c4c9a0c 100644 --- a/common/hash.c +++ b/common/hash.c @@ -28,6 +28,7 @@ #include <hash.h> #include <sha1.h> #include <sha256.h> +#include <asm/io.h> /* * These are the hash algorithms we support. Chips which support accelerated @@ -117,10 +118,13 @@ static void store_result(struct hash_algo *algo, const u8 *sum, str_ptr = '\0'; setenv(dest, str_output); } else { - u8 *ptr; + ulong addr; + void *buf; - ptr = (u8 *)simple_strtoul(dest, NULL, 16); - memcpy(ptr, sum, algo->digest_size); + addr = simple_strtoul(dest, NULL, 16); + buf = map_sysmem(addr, algo->digest_size); + memcpy(buf, sum, algo->digest_size); + unmap_sysmem(buf); } } @@ -154,10 +158,12 @@ static int parse_verify_sum(struct hash_algo *algo, char *verify_str, u8 *vsum, } if (env_var) { - u8 *ptr; + ulong addr; + void *buf; - ptr = (u8 *)simple_strtoul(verify_str, NULL, 16); - memcpy(vsum, ptr, algo->digest_size); + addr = simple_strtoul(verify_str, NULL, 16); + buf = map_sysmem(addr, algo->digest_size); + memcpy(vsum, buf, algo->digest_size); } else { unsigned int i; char *vsum_str; @@ -228,6 +234,7 @@ int hash_command(const char *algo_name, int flags, cmd_tbl_t *cmdtp, int flag, struct hash_algo *algo; u8 output[HASH_MAX_DIGEST_SIZE]; u8 vsum[HASH_MAX_DIGEST_SIZE]; + void *buf; algo = find_hash_algo(algo_name); if (!algo) { @@ -241,8 +248,9 @@ int hash_command(const char *algo_name, int flags, cmd_tbl_t *cmdtp, int flag, return 1; } - algo->hash_func_ws((const unsigned char *)addr, len, output, - algo->chunk_size); + buf = map_sysmem(addr, len); + algo->hash_func_ws(buf, len, output, algo->chunk_size); + unmap_sysmem(buf); /* Try to avoid code bloat when verify is not needed */ #ifdef CONFIG_HASH_VERIFY |