Blame jemalloc/include/jemalloc/internal/safety_check.h

Packit 345191
#ifndef JEMALLOC_INTERNAL_SAFETY_CHECK_H
Packit 345191
#define JEMALLOC_INTERNAL_SAFETY_CHECK_H
Packit 345191
Packit 345191
void safety_check_fail(const char *format, ...);
Packit 345191
/* Can set to NULL for a default. */
Packit 345191
void safety_check_set_abort(void (*abort_fn)());
Packit 345191
Packit 345191
JEMALLOC_ALWAYS_INLINE void
Packit 345191
safety_check_set_redzone(void *ptr, size_t usize, size_t bumped_usize) {
Packit 345191
	assert(usize < bumped_usize);
Packit 345191
	for (size_t i = usize; i < bumped_usize && i < usize + 32; ++i) {
Packit 345191
		*((unsigned char *)ptr + i) = 0xBC;
Packit 345191
	}
Packit 345191
}
Packit 345191
Packit 345191
JEMALLOC_ALWAYS_INLINE void
Packit 345191
safety_check_verify_redzone(const void *ptr, size_t usize, size_t bumped_usize)
Packit 345191
{
Packit 345191
	for (size_t i = usize; i < bumped_usize && i < usize + 32; ++i) {
Packit 345191
		if (unlikely(*((unsigned char *)ptr + i) != 0xBC)) {
Packit 345191
			safety_check_fail("Use after free error\n");
Packit 345191
		}
Packit 345191
	}
Packit 345191
}
Packit 345191
Packit 345191
#endif /*JEMALLOC_INTERNAL_SAFETY_CHECK_H */