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
9 safety_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
17 safety_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