1 =========================== 2 Sanitizer special case list 3 =========================== 4 5 .. contents:: 6 :local: 7 8 Introduction 9 ============ 10 11 This document describes the way to disable or alter the behavior of 12 sanitizer tools for certain source-level entities by providing a special 13 file at compile-time. 14 15 Goal and usage 16 ============== 17 18 User of sanitizer tools, such as :doc:`AddressSanitizer`, :doc:`ThreadSanitizer` 19 or :doc:`MemorySanitizer` may want to disable or alter some checks for 20 certain source-level entities to: 21 22 * speedup hot function, which is known to be correct; 23 * ignore a function that does some low-level magic (e.g. walks through the 24 thread stack, bypassing the frame boundaries); 25 * ignore a known problem. 26 27 To achieve this, user may create a file listing the entities they want to 28 ignore, and pass it to clang at compile-time using 29 ``-fsanitize-ignorelist`` flag. See :doc:`UsersManual` for details. 30 31 Example 32 ======= 33 34 .. code-block:: bash 35 36 $ cat foo.c 37 #include <stdlib.h> 38 void bad_foo() { 39 int *a = (int*)malloc(40); 40 a[10] = 1; 41 } 42 int main() { bad_foo(); } 43 $ cat ignorelist.txt 44 # Ignore reports from bad_foo function. 45 fun:bad_foo 46 $ clang -fsanitize=address foo.c ; ./a.out 47 # AddressSanitizer prints an error report. 48 $ clang -fsanitize=address -fsanitize-ignorelist=ignorelist.txt foo.c ; ./a.out 49 # No error report here. 50 51 Format 52 ====== 53 54 Ignorelists consist of entries, optionally grouped into sections. Empty lines 55 and lines starting with "#" are ignored. 56 57 Section names are regular expressions written in square brackets that denote 58 which sanitizer the following entries apply to. For example, ``[address]`` 59 specifies AddressSanitizer while ``[cfi-vcall|cfi-icall]`` specifies Control 60 Flow Integrity virtual and indirect call checking. Entries without a section 61 will be placed under the ``[*]`` section applying to all enabled sanitizers. 62 63 Entries contain an entity type, followed by a colon and a regular expression, 64 specifying the names of the entities, optionally followed by an equals sign and 65 a tool-specific category, e.g. ``fun:*ExampleFunc=example_category``. The 66 meaning of ``*`` in regular expression for entity names is different - it is 67 treated as in shell wildcarding. Two generic entity types are ``src`` and 68 ``fun``, which allow users to specify source files and functions, respectively. 69 Some sanitizer tools may introduce custom entity types and categories - refer to 70 tool-specific docs. 71 72 .. code-block:: bash 73 74 # Lines starting with # are ignored. 75 # Turn off checks for the source file (use absolute path or path relative 76 # to the current working directory): 77 src:/path/to/source/file.c 78 # Turn off checks for a particular functions (use mangled names): 79 fun:MyFooBar 80 fun:_Z8MyFooBarv 81 # Extended regular expressions are supported: 82 fun:bad_(foo|bar) 83 src:bad_source[1-9].c 84 # Shell like usage of * is supported (* is treated as .*): 85 src:bad/sources/* 86 fun:*BadFunction* 87 # Specific sanitizer tools may introduce categories. 88 src:/special/path/*=special_sources 89 # Sections can be used to limit ignorelist entries to specific sanitizers 90 [address] 91 fun:*BadASanFunc* 92 # Section names are regular expressions 93 [cfi-vcall|cfi-icall] 94 fun:*BadCfiCall 95 # Entries without sections are placed into [*] and apply to all sanitizers 96