1 // RUN: %clang_hwasan %s -o %t && not %env_hwasan_opts=verbose_threads=1 %run %t 2>&1 | FileCheck %s
7 #include <sanitizer/hwasan_interface.h>
9 void *BoringThread(void *arg
) {
10 char * volatile x
= (char*)malloc(10);
16 // CHECK: Creating : T0
17 // CHECK: Creating : T1
18 // CHECK: Destroying: T1
19 // CHECK: Creating : T1100
20 // CHECK: Destroying: T1100
21 // CHECK: Creating : T1101
23 void *UAFThread(void *arg
) {
24 char * volatile x
= (char*)malloc(10);
25 fprintf(stderr
, "ZZZ %p\n", x
);
29 // CHECK: ERROR: HWAddressSanitizer: tag-mismatch on address
30 // CHECK: WRITE of size 1
31 // CHECK: many-threads-uaf.c:[[@LINE-3]]
32 // CHECK: Thread: T1101
37 __hwasan_enable_allocator_tagging();
39 for (int i
= 0; i
< 1100; i
++) {
40 pthread_create(&t
, NULL
, BoringThread
, NULL
);
41 pthread_join(t
, NULL
);
43 pthread_create(&t
, NULL
, UAFThread
, NULL
);
44 pthread_join(t
, NULL
);