An invalid heap usage such as a double free is usually a fatal error since this indicates a use after free. Replace the use of printk() in free() with a fatal error.
Update #3437. --- cpukit/include/rtems/score/interr.h | 7 +++++++ cpukit/libcsupport/src/free.c | 7 +------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/cpukit/include/rtems/score/interr.h b/cpukit/include/rtems/score/interr.h index 3144952716..f09072d5fb 100644 --- a/cpukit/include/rtems/score/interr.h +++ b/cpukit/include/rtems/score/interr.h @@ -131,6 +131,13 @@ typedef enum { RTEMS_FATAL_SOURCE_PANIC = 11, /** + * @brief Fatal source for invalid C program heap frees via free(). + * + * The fatal code is the bad pointer. + */ + RTEMS_FATAL_SOURCE_INVALID_HEAP_FREE = 12, + + /** * @brief The last available fatal source. * * This enum value ensures that the enum type needs at least 32-bits for diff --git a/cpukit/libcsupport/src/free.c b/cpukit/libcsupport/src/free.c index 90209580db..d8dd2bdb0e 100644 --- a/cpukit/libcsupport/src/free.c +++ b/cpukit/libcsupport/src/free.c @@ -38,12 +38,7 @@ void free( } if ( !_Protected_heap_Free( RTEMS_Malloc_Heap, ptr ) ) { - printk( "Program heap: free of bad pointer %p -- range %p - %p \n", - ptr, - (void*) RTEMS_Malloc_Heap->area_begin, - (void*) RTEMS_Malloc_Heap->area_end - ); + rtems_fatal( RTEMS_FATAL_SOURCE_INVALID_HEAP_FREE, (rtems_fatal_code) ptr ); } - } #endif -- 2.13.6 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel