]> granicus.if.org Git - esp-idf/commitdiff
heap: heap_caps_malloc(..., MALLOC_CAP_32_BIT) should always align a 32-bit aligned...
authorAngus Gratton <angus@espressif.com>
Tue, 31 Jul 2018 04:29:31 +0000 (14:29 +1000)
committerAngus Gratton <gus@projectgus.com>
Tue, 31 Jul 2018 04:29:31 +0000 (14:29 +1000)
Fixes crash in heap poisoning code if a non-32bit-aligned size is specified.

components/heap/heap_caps.c

index e5a273a0f15eb2a7de3cdae5813636646197b1da..90b8821f59043fc9d9107d047a84ee7d0997a39b 100644 (file)
@@ -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;