Annotation of wikisrc/users/kamil/sanitizers.mdwn, revision 1.4
1.1 kamil 1: Sanitizers for NetBSD
2:
3: # Current status
4:
5: Summary of the current status of sanitizers on a NetBSD host.
6:
7: # What are sanitizers?
8:
9: Sanitizer is a programming tool that detects computer program bugs such as buffer overflows, signed integer overflow, uninitialized memory read etc.
10:
11: Sanitizers are developed in LLVM, and a downstream port exists to GCC.
12:
13: # Types of sanitizers
14:
15: There are various types of sanitizers.
16:
17: A sanitizer is composed of an instrumentation part builtin into a compiler's code generation part.
18:
19: The instrumentation part emitted by a compiler requires a runtime library, that is shipped with compiler-rt.
20:
21: * Undefined Behavior Sanitizer (UBSan)
22: * Undefined Behavior with minimal runtime (UBSan_minimal)
23: * Address Sanitizer (ASan)
24: * Hardware Assisted Address Sanitizer (HWASan)
25: * Thread Sanitizer (TSan)
26: * Memory Sanitizer (MSan)
27: * Efficiency Sanitizer (ESan)
28: * Data Flow Sanitizer (DFSan)
29: * Leak Sanitizer (LSan)
30:
31: Additionally there are the following features shipped together with sanitizers:
32:
33: * profile
34: * SafeStack
35: * Control Flow Integrity
36: * Scudo Hardened Allocator
37: * XRay
38: * libFuzzer
39: * ShadowCallStack
40:
41: The compiler-rt package ships with libBlocksRuntime, builtins etc.
42:
43: As a NetBSD specific extension, there is a micro-UBSan runtime developed and maintained in the NetBSD source code.
44: It is designed to function inside libc (uUBSan - usermode-UBSan) and inside the kernel (kUBSan - kernel-UBSan).
45:
46: # Sanitizers in NetBSD
47:
48: Sanitizers in NetBSD are shipped with the following options:
49:
50: * together with the toolchain with the default compiler runtime (default),
51: * together with the MKSANITIZER option (build the userland with the default compiler sanitizer),
52: * together with the MKLIBCSANITIZER option (build the userland with a homegrown sanitizer runtime),
53: * together with the NetBSD kernel (build the kernel with a homegrown kernel sanitizer runtime).
54:
55: MKSANITIZER blog entry:
56:
57: http://blog.netbsd.org/tnf/entry/mksanitizer_bug_detector_software_integration
58:
59: MKLIBCSANITIZER and kernel sanitizer blog entry:
60:
61: http://blog.netbsd.org/tnf/entry/introduction_to_%C2%B5ubsan_a_clean
62:
63: # Support in NetBSD
64:
65: Currently the main focus is with LLVM and GCC.
66:
67: Generic TODO:
68:
69: * switch syscall(2)/__syscall(2) to libc calls
70: * upstream local patches / rebase to newly developed support in LLVM available in GCC 8.x and newer
71: * develop missing interceptors such as fts(3) (mostly MSan-centric)
72: * FILE and DIR sanitization (needed by at least: ESan, MSan)
73: * improve the framework for ioctl(2) database and handle special cases when a part of a struct can be uninitialized and passed to the kernel (MSan)
74: * finish StopTheWorld() and upstream to LLVM
75: * port to !x86
76: * fixes with the signal code
77: * pkgsrc integration
78: * finish the support of float128 for Clang/LLVM/libstdc++/libgcc
79: * LLVM fixes for shared (dlopen(3)-powered) runtime
80: * fix other bugs.
81:
82: ## GCC
83:
84: The GCC compiler assumed the version in distribution.
85:
86: ### GCC with the default runtime
87:
88: Name | NetBSD status
1.2 kamil 89: ----------|---------------------------------
1.1 kamil 90: UBSan | mostly works with all ports
91: ASan | mostly works with amd64 and i386
92: LSan | might work with amd64 and i386
93:
94: ### GCC with MKSANITIZER
95:
96: Untested.
97:
98: ### GCC with MKLIBCSANITIZER
99:
100: Name | NetBSD status
1.2 kamil 101: ----------|---------------------------------
1.1 kamil 102: UBSan | works with micro-UBSan
103:
104: ### GCC with kernel sanitizers
105:
106: Name | NetBSD status
1.2 kamil 107: ----------|---------------------------------
1.1 kamil 108: UBSan | works with micro-UBSan
109:
110: ## LLVM
111:
112: The LLVM support is available only with the HEAD version of the toolchain and not shipped in the base distribution.
113:
114: ### LLVM with the default runtime
115:
116: Name | NetBSD status
1.2 kamil 117: ----------|---------------------------------
1.4 ! kamil 118: UBSan | mostly works with all LLVM ports
! 119: ASan | mostly works with amd64 and i386
! 120: MSan | mostly works with amd64
! 121: TSan | mostly works with amd64
1.1 kamil 122:
123: ### LLVM with MKSANITIZER
124:
1.3 kamil 125: Name | NetBSD status
126: ----------|---------------------------------
1.4 ! kamil 127: UBSan | mostly works with all LLVM ports
! 128: ASan | mostly works with amd64 and i386
1.1 kamil 129:
130: ### LLVM with MKLIBCSANITIZER
131:
132: Name | NetBSD status
1.2 kamil 133: ----------|---------------------------------
1.1 kamil 134: UBSan | works with micro-UBSan
135:
136: ### LLVM with kernel sanitizers
137:
138: Name | NetBSD status
1.2 kamil 139: ----------|---------------------------------
1.1 kamil 140: UBSan | works with micro-UBSan
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb