diff options
author | Stefan Mahr <stefan.mahr@sphairon.com> | 2011-08-10 23:42:28 +0200 |
---|---|---|
committer | Øyvind Harboe <oyvind.harboe@zylin.com> | 2011-08-12 12:00:51 +0200 |
commit | 45b5c838a66b200bd05d401f2b245bba3fd46d9d (patch) | |
tree | 963da32b335d9811526f96089080c2c340482d9d | |
parent | 85f1963d52a4aa2a82f6966dc9a16f5d48b0b93d (diff) |
mips: fix potential alignment error
-rw-r--r-- | src/target/mips_m4k.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/target/mips_m4k.c b/src/target/mips_m4k.c index facf9a56..7be96a49 100644 --- a/src/target/mips_m4k.c +++ b/src/target/mips_m4k.c @@ -870,7 +870,22 @@ static int mips_m4k_read_memory(struct target *target, uint32_t address, if (((size == 4) && (address & 0x3u)) || ((size == 2) && (address & 0x1u))) return ERROR_TARGET_UNALIGNED_ACCESS; - void * t = buffer; + /* since we don't know if buffer is aligned, we allocate new mem that is always aligned */ + void *t = NULL; + + if (size > 1) + { + t = malloc(count * size * sizeof(uint8_t)); + if (t == NULL) + { + LOG_ERROR("Out of memory"); + return ERROR_FAIL; + } + } + else + { + t = buffer; + } /* if noDMA off, use DMAACC mode for memory read */ int retval; @@ -894,6 +909,9 @@ static int mips_m4k_read_memory(struct target *target, uint32_t address, } } + if ((size > 1) && (t != NULL)) + free(t); + return retval; } |