annotate compiler-rt/test/hwasan/TestCases/heap-buffer-overflow.c @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents 1f2b6ac9f198
children
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
anatofuz
parents:
diff changeset
2 // RUN: not %run %t 40 2>&1 | FileCheck %s --check-prefix=CHECK40
anatofuz
parents:
diff changeset
3 // RUN: not %run %t 80 2>&1 | FileCheck %s --check-prefix=CHECK80
anatofuz
parents:
diff changeset
4 // RUN: not %run %t -30 2>&1 | FileCheck %s --check-prefix=CHECKm30
anatofuz
parents:
diff changeset
5 // RUN: not %run %t -30 1000000 2>&1 | FileCheck %s --check-prefix=CHECKMm30
anatofuz
parents:
diff changeset
6 // RUN: not %run %t 1000000 1000000 2>&1 | FileCheck %s --check-prefix=CHECKM
anatofuz
parents:
diff changeset
7
anatofuz
parents:
diff changeset
8 // Test OOB within the granule.
anatofuz
parents:
diff changeset
9 // RUN: not %run %t 31 2>&1 | FileCheck %s --check-prefix=CHECK31
anatofuz
parents:
diff changeset
10 // RUN: not %run %t 30 20 2>&1 | FileCheck %s --check-prefix=CHECK20
anatofuz
parents:
diff changeset
11
anatofuz
parents:
diff changeset
12 #include <stdlib.h>
anatofuz
parents:
diff changeset
13 #include <stdio.h>
anatofuz
parents:
diff changeset
14 #include <sanitizer/hwasan_interface.h>
anatofuz
parents:
diff changeset
15
anatofuz
parents:
diff changeset
16 static volatile char sink;
anatofuz
parents:
diff changeset
17
anatofuz
parents:
diff changeset
18 int main(int argc, char **argv) {
anatofuz
parents:
diff changeset
19 __hwasan_enable_allocator_tagging();
anatofuz
parents:
diff changeset
20 int offset = argc < 2 ? 40 : atoi(argv[1]);
anatofuz
parents:
diff changeset
21 int size = argc < 3 ? 30 : atoi(argv[2]);
anatofuz
parents:
diff changeset
22 char * volatile x = (char*)malloc(size);
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
23 fprintf(stderr, "base: %p access: %p\n", x, &x[offset]);
150
anatofuz
parents:
diff changeset
24 sink = x[offset];
anatofuz
parents:
diff changeset
25
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
26 #if defined(__x86_64__)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
27 // Aliasing mode doesn't support the secondary allocator, so we fake a HWASan
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
28 // report instead of disabling the entire test.
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
29 if (size == 1000000) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
30 fprintf(stderr, "is a large allocated heap chunk; size: 1003520 offset: %d\n",
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
31 offset);
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
32 fprintf(stderr, "Cause: heap-buffer-overflow\n");
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
33 fprintf(stderr, "is located %s a 1000000-byte region\n",
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
34 offset == -30 ? "30 bytes before" : "0 bytes after");
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
35 return -1;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
36 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
37 #endif
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
38
150
anatofuz
parents:
diff changeset
39 // CHECK40: allocated heap chunk; size: 32 offset: 8
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
40 // CHECK40: Cause: heap-buffer-overflow
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
41 // CHECK40: is located 10 bytes after a 30-byte region
150
anatofuz
parents:
diff changeset
42 //
anatofuz
parents:
diff changeset
43 // CHECK80: allocated heap chunk; size: 32 offset: 16
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
44 // CHECK80: Cause: heap-buffer-overflow
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
45 // CHECK80: is located 50 bytes after a 30-byte region
150
anatofuz
parents:
diff changeset
46 //
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
47 // CHECKm30: Cause: heap-buffer-overflow
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
48 // CHECKm30: is located 30 bytes before a 30-byte region
150
anatofuz
parents:
diff changeset
49 //
anatofuz
parents:
diff changeset
50 // CHECKMm30: is a large allocated heap chunk; size: 1003520 offset: -30
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
51 // CHECKMm30: Cause: heap-buffer-overflow
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
52 // CHECKMm30: is located 30 bytes before a 1000000-byte region
150
anatofuz
parents:
diff changeset
53 //
anatofuz
parents:
diff changeset
54 // CHECKM: is a large allocated heap chunk; size: 1003520 offset: 1000000
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
55 // CHECKM: Cause: heap-buffer-overflow
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
56 // CHECKM: is located 0 bytes after a 1000000-byte region
150
anatofuz
parents:
diff changeset
57 //
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
58 // CHECK31: tags: [[TAG:..]]/0e([[TAG]]) (ptr/mem)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
59 // CHECK31-NOT: Invalid access starting at offset
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
60 // CHECK31: Cause: heap-buffer-overflow
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
61 // CHECK31: is located 1 bytes after a 30-byte region
150
anatofuz
parents:
diff changeset
62 // CHECK31: Memory tags around the buggy address
anatofuz
parents:
diff changeset
63 // CHECK31: [0e]
anatofuz
parents:
diff changeset
64 // CHECK31: Tags for short granules around the buggy address
anatofuz
parents:
diff changeset
65 // CHECK31: {{\[}}[[TAG]]]
anatofuz
parents:
diff changeset
66 //
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
67 // CHECK20-NOT: Invalid access starting at offset
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
68 // CHECK20: Cause: heap-buffer-overflow
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
69 // CHECK20: is located 10 bytes after a 20-byte region [0x{{.*}}0,0x{{.*}}4)
150
anatofuz
parents:
diff changeset
70 free(x);
anatofuz
parents:
diff changeset
71 }