From 155de9c49ef18283ac606e6c655d66b91e65f25c Mon Sep 17 00:00:00 2001 From: Omar Chebib Date: Tue, 14 Dec 2021 13:25:00 +0800 Subject: [PATCH] Heap: Add a target test to check that TLFS allocates the requested size --- .../test_multi_heap_host/test_multi_heap.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/components/heap/test_multi_heap_host/test_multi_heap.cpp b/components/heap/test_multi_heap_host/test_multi_heap.cpp index 0a95c2d2c7..0a730e1696 100644 --- a/components/heap/test_multi_heap_host/test_multi_heap.cpp +++ b/components/heap/test_multi_heap_host/test_multi_heap.cpp @@ -484,6 +484,22 @@ TEST_CASE("multi_heap aligned allocations", "[multi_heap]") } } + /* Check that TLSF doesn't allocate a memory space smaller than required. + * In any case, TLSF will write data in the previous block than the one + * allocated. Thus, we should try to get/allocate this previous block. If + * the poisoned filled pattern has beeen overwritten by TLSF, then this + * previous block will trigger an exception. + * More info on this bug in !16296. */ + const size_t size = 50; /* TLSF will round the size up */ + uint8_t *buf1 = (uint8_t *)multi_heap_aligned_alloc(heap, size, 4); + uint8_t *buf2 = (uint8_t *)multi_heap_aligned_alloc(heap, size, 4); + multi_heap_free(heap, buf1); + /* By specifying a size equal of the gap between buf1 and buf2. We are + * trying to force TLSF to allocate two consecutive blocks. */ + buf1 = (uint8_t *)multi_heap_aligned_alloc(heap, buf2 - buf1, 4); + multi_heap_free(heap, buf2); + + printf("[ALIGNED_ALLOC] heap_size after: %d \n", multi_heap_free_size(heap)); REQUIRE((old_size - multi_heap_free_size(heap)) <= leakage); }