// Test that disabling/enabling tagging does not trigger false reports on // allocations happened in a different state. // RUN: %clang_hwasan -O1 %s -o %t && %run %t 2>&1 #include #include #include enum { COUNT = 5, SZ = 10, }; void *x[COUNT]; int main() { __hwasan_enable_allocator_tagging(); for (unsigned i = 0; i < COUNT; ++i) { x[i] = malloc(SZ); assert(__hwasan_test_shadow(x[i], SZ) == -1); } for (unsigned i = 0; i < COUNT; ++i) free(x[i]); __hwasan_disable_allocator_tagging(); for (unsigned i = 0; i < COUNT; ++i) { x[i] = malloc(SZ); assert(__hwasan_tag_pointer(x[i], 0) == x[i]); assert(__hwasan_test_shadow(x[i], SZ) == -1); } for (unsigned i = 0; i < COUNT; ++i) free(x[i]); __hwasan_enable_allocator_tagging(); for (unsigned i = 0; i < COUNT; ++i) { x[i] = malloc(SZ); assert(__hwasan_test_shadow(x[i], SZ) == -1); } for (unsigned i = 0; i < COUNT; ++i) free(x[i]); return 0; }