xref: /freebsd/contrib/jemalloc/include/jemalloc/internal/safety_check.h (revision c5ad81420c495d1d5de04209b0ec4fcb435c322c)
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)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
safety_check_verify_redzone(const void * ptr,size_t usize,size_t bumped_usize)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