The avr-libc malloc and friends such as realloc and free are implemented in a way that is not re-entrant.
When using FreeRTOS, any application code can be pre-empted and needs to be thread-safe. FreeRTOS does have its own allocators independent of avr-libc, and one allocator which wraps avr-libc in what is effectively a critical section.
However this does not solve the problem of legacy library code which use avr-libc directly, such as
Arduino String library
avr-lib’s strdup() and possibly others
When pre-empted, the allocator structures (freelist, etc) can be corrupted resulting in hard-to-find bugs.
I think a good solution to this would be to provide entry/exit hooks on the malloc and friends implementations, that can optionally be implemented to ensure that the avr-libc implementation is in a section that will prevent pre-emption. This can easily be done using weak linker symbols, that can be ignored by existing code, but provide a hook for the entry/exit handlers.