PR #666: MDEV-15030 Add ASAN instrumentation
mem_heap_create_block(): Poison the payload area until mem_heap_alloc() unpoisons it.
This commit is contained in:
commit
69bc3c1976
@ -35,6 +35,8 @@
|
||||
# define MEM_CHECK_DEFINED(a,len) VALGRIND_CHECK_MEM_IS_DEFINED(a,len)
|
||||
#elif defined(__SANITIZE_ADDRESS__)
|
||||
# include <sanitizer/asan_interface.h>
|
||||
/* How to do manual poisoning:
|
||||
https://github.com/google/sanitizers/wiki/AddressSanitizerManualPoisoning */
|
||||
# define MEM_UNDEFINED(a,len) ASAN_UNPOISON_MEMORY_REGION(a,len)
|
||||
# define MEM_NOACCESS(a,len) ASAN_POISON_MEMORY_REGION(a,len)
|
||||
# define MEM_CHECK_ADDRESSABLE(a,len) ((void) 0)
|
||||
|
@ -404,6 +404,11 @@ mem_heap_create_block(
|
||||
heap->total_size += len;
|
||||
}
|
||||
|
||||
/* Poison all available memory. Individual chunks will be unpoisoned on
|
||||
every mem_heap_alloc() call. */
|
||||
compile_time_assert(MEM_BLOCK_HEADER_SIZE >= sizeof *block);
|
||||
UNIV_MEM_FREE(block + 1, len - sizeof *block);
|
||||
|
||||
ut_ad((ulint)MEM_BLOCK_HEADER_SIZE < len);
|
||||
|
||||
return(block);
|
||||
|
@ -404,6 +404,11 @@ mem_heap_create_block(
|
||||
heap->total_size += len;
|
||||
}
|
||||
|
||||
/* Poison all available memory. Individual chunks will be unpoisoned on
|
||||
every mem_heap_alloc() call. */
|
||||
compile_time_assert(MEM_BLOCK_HEADER_SIZE >= sizeof *block);
|
||||
UNIV_MEM_FREE(block + 1, len - sizeof *block);
|
||||
|
||||
ut_ad((ulint)MEM_BLOCK_HEADER_SIZE < len);
|
||||
|
||||
return(block);
|
||||
|
Loading…
x
Reference in New Issue
Block a user