| // 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 <assert.h> |
| #include <sanitizer/hwasan_interface.h> |
| #include <stdlib.h> |
| |
| 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; |
| } |