Home | History | Annotate | Line # | Download | only in src
      1 #include "jemalloc/internal/jemalloc_preamble.h"
      2 #include "jemalloc/internal/jemalloc_internal_includes.h"
      3 
      4 static safety_check_abort_hook_t safety_check_abort;
      5 
      6 void safety_check_fail_sized_dealloc(bool current_dealloc, const void *ptr,
      7     size_t true_size, size_t input_size) {
      8 	const char *src = current_dealloc ? "the current pointer being freed" :
      9 	    "in thread cache, possibly from previous deallocations";
     10 
     11 	safety_check_fail("<jemalloc>: size mismatch detected (true size %zu "
     12 	    "vs input size %zu), likely caused by application sized "
     13 	    "deallocation bugs (source address: %p, %s). Suggest building with "
     14 	    "--enable-debug or address sanitizer for debugging. Abort.\n",
     15 	    true_size, input_size, ptr, src);
     16 }
     17 
     18 void safety_check_set_abort(safety_check_abort_hook_t abort_fn) {
     19 	safety_check_abort = abort_fn;
     20 }
     21 
     22 void safety_check_fail(const char *format, ...) {
     23 	char buf[MALLOC_PRINTF_BUFSIZE];
     24 
     25 	va_list ap;
     26 	va_start(ap, format);
     27 	malloc_vsnprintf(buf, MALLOC_PRINTF_BUFSIZE, format, ap);
     28 	va_end(ap);
     29 
     30 	if (safety_check_abort == NULL) {
     31 		malloc_write(buf);
     32 		abort();
     33 	} else {
     34 		safety_check_abort(buf);
     35 	}
     36 }
     37