annotate compiler-rt/test/hwasan/TestCases/many-threads-uaf.c @ 221:79ff65ed7e25

LLVM12 Original
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 15 Jun 2021 19:15:29 +0900
parents 1d019706d866
children 1f2b6ac9f198
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clang_hwasan %s -o %t && not %env_hwasan_opts=verbose_threads=1 %run %t 2>&1 | FileCheck %s
anatofuz
parents:
diff changeset
2 // REQUIRES: stable-runtime
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4 #include <pthread.h>
anatofuz
parents:
diff changeset
5 #include <stdlib.h>
anatofuz
parents:
diff changeset
6 #include <stdio.h>
anatofuz
parents:
diff changeset
7
anatofuz
parents:
diff changeset
8 #include <sanitizer/hwasan_interface.h>
anatofuz
parents:
diff changeset
9
anatofuz
parents:
diff changeset
10 void *BoringThread(void *arg) {
anatofuz
parents:
diff changeset
11 char * volatile x = (char*)malloc(10);
anatofuz
parents:
diff changeset
12 x[5] = 0;
anatofuz
parents:
diff changeset
13 free(x);
anatofuz
parents:
diff changeset
14 return NULL;
anatofuz
parents:
diff changeset
15 }
anatofuz
parents:
diff changeset
16
anatofuz
parents:
diff changeset
17 // CHECK: Creating : T0
anatofuz
parents:
diff changeset
18 // CHECK: Creating : T1
anatofuz
parents:
diff changeset
19 // CHECK: Destroying: T1
anatofuz
parents:
diff changeset
20 // CHECK: Creating : T1100
anatofuz
parents:
diff changeset
21 // CHECK: Destroying: T1100
anatofuz
parents:
diff changeset
22 // CHECK: Creating : T1101
anatofuz
parents:
diff changeset
23
anatofuz
parents:
diff changeset
24 void *UAFThread(void *arg) {
anatofuz
parents:
diff changeset
25 char * volatile x = (char*)malloc(10);
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
26 fprintf(stderr, "ZZZ %p\n", x);
150
anatofuz
parents:
diff changeset
27 free(x);
anatofuz
parents:
diff changeset
28 x[5] = 42;
anatofuz
parents:
diff changeset
29 // CHECK: ERROR: HWAddressSanitizer: tag-mismatch on address
anatofuz
parents:
diff changeset
30 // CHECK: WRITE of size 1
anatofuz
parents:
diff changeset
31 // CHECK: many-threads-uaf.c:[[@LINE-3]]
anatofuz
parents:
diff changeset
32 // CHECK: Thread: T1101
anatofuz
parents:
diff changeset
33 return NULL;
anatofuz
parents:
diff changeset
34 }
anatofuz
parents:
diff changeset
35
anatofuz
parents:
diff changeset
36 int main() {
anatofuz
parents:
diff changeset
37 __hwasan_enable_allocator_tagging();
anatofuz
parents:
diff changeset
38 pthread_t t;
anatofuz
parents:
diff changeset
39 for (int i = 0; i < 1100; i++) {
anatofuz
parents:
diff changeset
40 pthread_create(&t, NULL, BoringThread, NULL);
anatofuz
parents:
diff changeset
41 pthread_join(t, NULL);
anatofuz
parents:
diff changeset
42 }
anatofuz
parents:
diff changeset
43 pthread_create(&t, NULL, UAFThread, NULL);
anatofuz
parents:
diff changeset
44 pthread_join(t, NULL);
anatofuz
parents:
diff changeset
45 }