1#ifndef JEMALLOC_INTERNAL_SAFETY_CHECK_H
2#define JEMALLOC_INTERNAL_SAFETY_CHECK_H
3
4void safety_check_fail(const char *format, ...);
5/* Can set to NULL for a default. */
6void safety_check_set_abort(void (*abort_fn)());
7
8JEMALLOC_ALWAYS_INLINE void
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
16JEMALLOC_ALWAYS_INLINE void
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