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