1 | //===-- hwasan_flags.inc ----------------------------------------*- C++ -*-===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | // |
9 | // Hwasan runtime flags. |
10 | // |
11 | //===----------------------------------------------------------------------===// |
12 | #ifndef HWASAN_FLAG |
13 | # error "Define HWASAN_FLAG prior to including this file!" |
14 | #endif |
15 | |
16 | // HWASAN_FLAG(Type, Name, DefaultValue, Description) |
17 | // See COMMON_FLAG in sanitizer_flags.inc for more details. |
18 | |
19 | HWASAN_FLAG(bool, verbose_threads, false, |
20 | "inform on thread creation/destruction" ) |
21 | HWASAN_FLAG(bool, tag_in_malloc, true, "" ) |
22 | HWASAN_FLAG(bool, tag_in_free, true, "" ) |
23 | HWASAN_FLAG(bool, print_stats, false, "" ) |
24 | HWASAN_FLAG(bool, halt_on_error, true, "" ) |
25 | HWASAN_FLAG(bool, atexit, false, "" ) |
26 | HWASAN_FLAG( |
27 | bool, print_live_threads_info, true, |
28 | "If set, prints the remaining threads in report as an extra information." ) |
29 | |
30 | // Test only flag to disable malloc/realloc/free memory tagging on startup. |
31 | // Tagging can be reenabled with __hwasan_enable_allocator_tagging(). |
32 | HWASAN_FLAG(bool, disable_allocator_tagging, false, "" ) |
33 | |
34 | // If false, use simple increment of a thread local counter to generate new |
35 | // tags. |
36 | HWASAN_FLAG(bool, random_tags, true, "" ) |
37 | |
38 | HWASAN_FLAG( |
39 | int, max_malloc_fill_size, 0, |
40 | "HWASan allocator flag. max_malloc_fill_size is the maximal amount of " |
41 | "bytes that will be filled with malloc_fill_byte on malloc." ) |
42 | |
43 | HWASAN_FLAG(bool, free_checks_tail_magic, 1, |
44 | "If set, free() will check the magic values " |
45 | "after the allocated object " |
46 | "if the allocation size is not a divident of the granule size" ) |
47 | HWASAN_FLAG( |
48 | int, max_free_fill_size, 0, |
49 | "HWASan allocator flag. max_free_fill_size is the maximal amount of " |
50 | "bytes that will be filled with free_fill_byte during free." ) |
51 | HWASAN_FLAG(int, malloc_fill_byte, 0xbe, |
52 | "Value used to fill the newly allocated memory." ) |
53 | HWASAN_FLAG(int, free_fill_byte, 0x55, |
54 | "Value used to fill deallocated memory." ) |
55 | HWASAN_FLAG(int, heap_history_size, 1023, |
56 | "The number of heap (de)allocations remembered per thread. " |
57 | "Affects the quality of heap-related reports, but not the ability " |
58 | "to find bugs." ) |
59 | HWASAN_FLAG(bool, export_memory_stats, true, |
60 | "Export up-to-date memory stats through /proc" ) |
61 | HWASAN_FLAG(int, stack_history_size, 1024, |
62 | "The number of stack frames remembered per thread. " |
63 | "Affects the quality of stack-related reports, but not the ability " |
64 | "to find bugs." ) |
65 | |
66 | // Malloc / free bisection. Only tag malloc and free calls when a hash of |
67 | // allocation size and stack trace is between malloc_bisect_left and |
68 | // malloc_bisect_right (both inclusive). [0, 0] range is special and disables |
69 | // bisection (i.e. everything is tagged). Once the range is narrowed down |
70 | // enough, use malloc_bisect_dump to see interesting allocations. |
71 | HWASAN_FLAG(uptr, malloc_bisect_left, 0, |
72 | "Left bound of malloc bisection, inclusive." ) |
73 | HWASAN_FLAG(uptr, malloc_bisect_right, 0, |
74 | "Right bound of malloc bisection, inclusive." ) |
75 | HWASAN_FLAG(bool, malloc_bisect_dump, false, |
76 | "Print all allocations within [malloc_bisect_left, " |
77 | "malloc_bisect_right] range " ) |
78 | |
79 | |
80 | // Exit if we fail to enable the AArch64 kernel ABI relaxation which allows |
81 | // tagged pointers in syscalls. This is the default, but being able to disable |
82 | // that behaviour is useful for running the testsuite on more platforms (the |
83 | // testsuite can run since we manually ensure any pointer arguments to syscalls |
84 | // are untagged before the call. |
85 | HWASAN_FLAG(bool, fail_without_syscall_abi, true, |
86 | "Exit if fail to request relaxed syscall ABI." ) |
87 | |
88 | HWASAN_FLAG( |
89 | uptr, fixed_shadow_base, -1, |
90 | "If not -1, HWASan will attempt to allocate the shadow at this address, " |
91 | "instead of choosing one dynamically." |
92 | "Tip: this can be combined with the compiler option, " |
93 | "-hwasan-mapping-offset, to optimize the instrumentation." ) |
94 | |