summaryrefslogtreecommitdiff
path: root/common/hash.c
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2013-02-24 17:33:31 +0000
committerSimon Glass <sjg@chromium.org>2013-02-28 19:49:13 -0800
commitbd091b67d0ef2959ed0ff2aa6575ddb0d21c1f71 (patch)
tree0eb55b0c3adbc8fb1a6732188fc7ceb80d40be5f /common/hash.c
parent5512d5b034d3f199f16f7c18171cae7732bb05eb (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>
Diffstat (limited to 'common/hash.c')
-rw-r--r--common/hash.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/common/hash.c b/common/hash.c
index ef6fe375d2..0d04c4c9a0 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