Add a changes file for ticket 30686.
[tor.git] / contrib / clang / sanitize_blacklist.txt
blobc71cc4d878ce149838b7db7355c16d3089a7c5e2
1 # clang sanitizer special case list
2 # syntax specified in http://clang.llvm.org/docs/SanitizerSpecialCaseList.html
3 # for more info see http://clang.llvm.org/docs/AddressSanitizer.html
6 # Tor notes: This file is obsolete!
8 # It was necessary in order to apply the sanitizers to all of tor.  But
9 # we don't believe that's a good idea: some parts of tor need constant-time
10 # behavior that is hard to guarantee with these sanitizers.
12 # If you need this behavior, then please consider --enable-expensive-hardening,
13 # and report bugs as needed.
16 # usage:
17 # 1. configure tor build:
18 #    ./configure \
19 #    CC=clang \
20 #    CFLAGS="-fsanitize-blacklist=contrib/clang/sanitize_blacklist.txt -fsanitize=undefined -fsanitize=address -fno-sanitize-recover=all -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-inline" \
21 #    LDFLAGS="-fsanitize=address" \
22 #    --disable-gcc-hardening
23 # and any other flags required to build tor on your OS.
25 # 2. build tor:
26 #    make
28 # 3. test tor:
29 #    ASAN_OPTIONS=allow_user_segv_handler=1 make test
30 #    ASAN_OPTIONS=allow_user_segv_handler=1 make check
31 #    make test-network # requires chutney
33 # 4. the tor binary is now instrumented with clang sanitizers,
34 #    and can be run just like a standard tor binary
36 # Compatibility:
37 # This blacklist has been tested with clang 3.7's UndefinedBehaviorSanitizer
38 # and AddressSanitizer on OS X 10.10 Yosemite, with all tests passing
39 # on both x86_64 and i386 (using CC="clang -arch i386")
40 # It has not been tested with ThreadSanitizer or MemorySanitizer
41 # Success report and patches for other sanitizers or OSs are welcome
43 # ccache and make don't account for the sanitizer blacklist as a dependency
44 # you might need to set CCACHE_DISABLE=1 and/or use make clean to workaround
46 # Configuration Flags:
47 # -fno-sanitize-recover=all
48 # causes clang to crash on undefined behavior, rather than printing
49 # a warning and continuing (the AddressSanitizer always crashes)
50 # -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-inline
51 # make clang backtraces easier to read
52 # --disable-gcc-hardening
53 # disables warnings about the redefinition of _FORTIFY_SOURCE
54 # (it conflicts with the sanitizers)
56 # Turning the sanitizers off for particular functions:
57 # (Unfortunately, exempting functions doesn't work for the blacklisted
58 # functions below, and we can't turn the code off because it's essential)
60 # #if defined(__has_feature)
61 # #if __has_feature(address_sanitizer)
62 # /* tell clang AddressSanitizer not to instrument this function */
63 # #define NOASAN __attribute__((no_sanitize_address))
64 # #define _CLANG_ASAN_
65 # #else
66 # #define NOASAN
67 # #endif
68 # #else
69 # #define NOASAN
70 # #endif
72 # /* Telling AddressSanitizer to not instrument a function */
73 # void func(void) NOASAN;
75 # /* Including or excluding sections of code */
76 # #ifdef _CLANG_ASAN_
77 # /* code that only runs under address sanitizer */
78 # #else
79 # /* code that doesn't run under address sanitizer */
80 # #endif
82 # Blacklist Entries:
84 # test-memwipe.c checks if a freed buffer was properly wiped
85 fun:vmemeq
86 fun:check_a_buffer
88 # we need to allow the tor bt handler to catch SIGSEGV
89 # otherwise address sanitizer munges the expected output and the test fails
90 # we can do this by setting an environmental variable
91 # See https://code.google.com/p/address-sanitizer/wiki/Flags
92 # ASAN_OPTIONS=allow_user_segv_handler=1
94 # test_bt_cl.c stores to a NULL pointer to trigger a crash
95 fun:crash
97 # curve25519-donna.c left-shifts 1 bits into and past the sign bit of signed
98 # integers. Until #13538 is resolved, we exempt functions that do left shifts.
99 # Note that x86_64 uses curve25519-donna-c64.c instead of curve25519-donna.c
100 fun:freduce_coefficients
101 fun:freduce_degree
102 fun:s32_eq
103 fun:fcontract