[test][hwasan] Implement sanitizer_specific for HWASAN (#75280)

This commit is contained in:
Vitaly Buka 2023-12-13 14:39:35 -08:00 committed by GitHub
parent f397bdf5ae
commit c636b186bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -31,6 +31,30 @@ static void make_mem_good(void *p, size_t s) {
static void make_mem_bad(void *p, size_t s) {
__asan_poison_memory_region(p, s);
}
#elif __has_feature(hwaddress_sanitizer)
# include <sanitizer/hwasan_interface.h>
# include <stdlib.h>
static void check_mem_is_good(void *p, size_t s) {
if (__hwasan_test_shadow(p, s) != -1)
abort();
}
static void make_mem_good(void *p, size_t s) {
__hwasan_tag_memory(p, __hwasan_get_tag_from_pointer(p), s);
}
static void make_mem_bad(void *p, size_t s) {
uint8_t tag = ~__hwasan_get_tag_from_pointer(p);
if (!tag) {
// Nothing wrong with tag zero, but non-zero tags help to detect never
// tagged memory.
tag = 1;
}
__hwasan_tag_memory(p, tag, s);
// With misaligned `p` or short granules we can't guarantee tag mismatch.
if (__hwasan_test_shadow(p, s) != 0)
abort();
if (s > 1 && __hwasan_test_shadow(((char *)p) + s - 1, 1) != 0)
abort();
}
#else
static void check_mem_is_good(void *p, size_t s) {}
static void make_mem_good(void *p, size_t s) {}