xref: /llvm-project/compiler-rt/test/hwasan/TestCases/enable-disable.c (revision 43aa6e6bf3d5ca1dde3e839f4c6ebd0e524055a1)
1*43aa6e6bSVitaly Buka // Test that disabling/enabling tagging does not trigger false reports on
2*43aa6e6bSVitaly Buka // allocations happened in a different state.
3*43aa6e6bSVitaly Buka 
4*43aa6e6bSVitaly Buka // RUN: %clang_hwasan -O1 %s -o %t && %run %t 2>&1
5*43aa6e6bSVitaly Buka 
6*43aa6e6bSVitaly Buka #include <assert.h>
7*43aa6e6bSVitaly Buka #include <sanitizer/hwasan_interface.h>
8*43aa6e6bSVitaly Buka #include <stdlib.h>
9*43aa6e6bSVitaly Buka 
10*43aa6e6bSVitaly Buka enum {
11*43aa6e6bSVitaly Buka   COUNT = 5,
12*43aa6e6bSVitaly Buka   SZ = 10,
13*43aa6e6bSVitaly Buka };
14*43aa6e6bSVitaly Buka void *x[COUNT];
15*43aa6e6bSVitaly Buka 
main()16*43aa6e6bSVitaly Buka int main() {
17*43aa6e6bSVitaly Buka   __hwasan_enable_allocator_tagging();
18*43aa6e6bSVitaly Buka   for (unsigned i = 0; i < COUNT; ++i) {
19*43aa6e6bSVitaly Buka     x[i] = malloc(SZ);
20*43aa6e6bSVitaly Buka     assert(__hwasan_test_shadow(x[i], SZ) == -1);
21*43aa6e6bSVitaly Buka   }
22*43aa6e6bSVitaly Buka   for (unsigned i = 0; i < COUNT; ++i)
23*43aa6e6bSVitaly Buka     free(x[i]);
24*43aa6e6bSVitaly Buka 
25*43aa6e6bSVitaly Buka   __hwasan_disable_allocator_tagging();
26*43aa6e6bSVitaly Buka   for (unsigned i = 0; i < COUNT; ++i) {
27*43aa6e6bSVitaly Buka     x[i] = malloc(SZ);
28*43aa6e6bSVitaly Buka     assert(__hwasan_tag_pointer(x[i], 0) == x[i]);
29*43aa6e6bSVitaly Buka     assert(__hwasan_test_shadow(x[i], SZ) == -1);
30*43aa6e6bSVitaly Buka   }
31*43aa6e6bSVitaly Buka   for (unsigned i = 0; i < COUNT; ++i)
32*43aa6e6bSVitaly Buka     free(x[i]);
33*43aa6e6bSVitaly Buka 
34*43aa6e6bSVitaly Buka   __hwasan_enable_allocator_tagging();
35*43aa6e6bSVitaly Buka   for (unsigned i = 0; i < COUNT; ++i) {
36*43aa6e6bSVitaly Buka     x[i] = malloc(SZ);
37*43aa6e6bSVitaly Buka     assert(__hwasan_test_shadow(x[i], SZ) == -1);
38*43aa6e6bSVitaly Buka   }
39*43aa6e6bSVitaly Buka   for (unsigned i = 0; i < COUNT; ++i)
40*43aa6e6bSVitaly Buka     free(x[i]);
41*43aa6e6bSVitaly Buka   return 0;
42*43aa6e6bSVitaly Buka }
43