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 |