From 45b5c838a66b200bd05d401f2b245bba3fd46d9d Mon Sep 17 00:00:00 2001 From: Stefan Mahr Date: Wed, 10 Aug 2011 23:42:28 +0200 Subject: [PATCH] mips: fix potential alignment error --- src/target/mips_m4k.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) 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; } -- 2.39.5