1 #ifndef JEMALLOC_INTERNAL_SAFETY_CHECK_H 2 #define JEMALLOC_INTERNAL_SAFETY_CHECK_H 3 4 void safety_check_fail(const char *format, ...); 5 /* Can set to NULL for a default. */ 6 void safety_check_set_abort(void (*abort_fn)()); 7 8 JEMALLOC_ALWAYS_INLINE void safety_check_set_redzone(void * ptr,size_t usize,size_t bumped_usize)9safety_check_set_redzone(void *ptr, size_t usize, size_t bumped_usize) { 10 assert(usize < bumped_usize); 11 for (size_t i = usize; i < bumped_usize && i < usize + 32; ++i) { 12 *((unsigned char *)ptr + i) = 0xBC; 13 } 14 } 15 16 JEMALLOC_ALWAYS_INLINE void safety_check_verify_redzone(const void * ptr,size_t usize,size_t bumped_usize)17safety_check_verify_redzone(const void *ptr, size_t usize, size_t bumped_usize) 18 { 19 for (size_t i = usize; i < bumped_usize && i < usize + 32; ++i) { 20 if (unlikely(*((unsigned char *)ptr + i) != 0xBC)) { 21 safety_check_fail("Use after free error\n"); 22 } 23 } 24 } 25 26 #endif /*JEMALLOC_INTERNAL_SAFETY_CHECK_H */ 27