From ae59d7522a66bca9fb0362477365bd5ac27022ef Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Tue, 31 Jul 2018 14:29:31 +1000 Subject: [PATCH] heap: heap_caps_malloc(..., MALLOC_CAP_32_BIT) should always align a 32-bit aligned size Fixes crash in heap poisoning code if a non-32bit-aligned size is specified. --- components/heap/heap_caps.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/components/heap/heap_caps.c b/components/heap/heap_caps.c index e5a273a0f..90b8821f5 100644 --- a/components/heap/heap_caps.c +++ b/components/heap/heap_caps.c @@ -75,9 +75,16 @@ IRAM_ATTR void *heap_caps_malloc( size_t size, uint32_t caps ) if ((caps & MALLOC_CAP_8BIT) || (caps & MALLOC_CAP_DMA)) { return NULL; } - //If any, EXEC memory should be 32-bit aligned, so round up to the next multiple of 4. + caps |= MALLOC_CAP_32BIT; // IRAM is 32-bit accessible RAM + } + + if (caps & MALLOC_CAP_32BIT) { + /* 32-bit accessible RAM should allocated in 4 byte aligned sizes + * (Future versions of ESP-IDF should possibly fail if an invalid size is requested) + */ size = (size + 3) & (~3); } + for (int prio = 0; prio < SOC_MEMORY_TYPE_NO_PRIOS; prio++) { //Iterate over heaps and check capabilities at this priority heap_t *heap;