From: Stefan Mahr Date: Wed, 10 Aug 2011 21:42:28 +0000 (+0200) Subject: mips: fix potential alignment error X-Git-Tag: v0.6.0-rc1~616 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=45b5c838a66b200bd05d401f2b245bba3fd46d9d;p=openocd mips: fix potential alignment error --- 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; }