]> begriffs open source - freertos/commit
Heap improvements (#462)
authorGaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
Thu, 24 Feb 2022 18:52:10 +0000 (10:52 -0800)
committerGitHub <noreply@github.com>
Thu, 24 Feb 2022 18:52:10 +0000 (10:52 -0800)
commit82be77995e7240597b82dfe3757ba6a78cec2920
tree182c04016774f439b7ac05e90d633f23a7af4e33
parent4539e1c57484720bdb601057ee85f0f40059f13f
Heap improvements (#462)

* Heap improvements

This commit makes the following improvements:

1. Add a check to heap_2 to track if a memory block is allocated to the
   application or not. The MSB of the size field is used for this
   purpose. The same check already exists in heap_4 and heap_5. This
   check prevents against double free.

2. Add a new flag configHEAP_CLEAR_MEMORY_ON_FREE to heap_2, heap_4 and
   heap_5. The application writer can set it to 1 in their
   FreeRTOSConfig.h to ensure that a block of memory allocated using
   pvPortMalloc is cleared (i.e. set to zero) when it is freed using
   vPortFree. If left undefined, configHEAP_CLEAR_MEMORY_ON_FREE
   defaults to 0 for backward compatibility. We recommend setting
   configHEAP_CLEAR_MEMORY_ON_FREE to 1 for better security.

3. Add a new API pvPortCalloc to heap_2, heap_4 and heap_5. This API
   has the following signature:
   void * pvPortCalloc( size_t xNum, size_t xSize );
   It allocates memory for an array of xNum objects each of which is of
   xSize and initializes all bytes in the allocated storage to zero. If
   allocation succeeds, it returns a pointer to the lowest byte in the
   allocated memory block. On failure, it returns a null pointer.

Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
include/portable.h
portable/MemMang/heap_2.c
portable/MemMang/heap_4.c
portable/MemMang/heap_5.c