Annotation of wikisrc/users/kamil/sanitizers.mdwn, revision 1.1
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
! 89: ----------+---------------------------------
! 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
! 101: ----------+---------------------------------
! 102: UBSan | works with micro-UBSan
! 103:
! 104: ### GCC with kernel sanitizers
! 105:
! 106: Name | NetBSD status
! 107: ----------+---------------------------------
! 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
! 117: ----------+---------------------------------
! 118: UBSan | works with all ports
! 119: ASan | works with amd64 and i386
! 120: MSan | works with amd64
! 121: TSan | works with amd64
! 122:
! 123: ### LLVM with MKSANITIZER
! 124:
! 125: Untested.
! 126:
! 127: ### LLVM with MKLIBCSANITIZER
! 128:
! 129: Name | NetBSD status
! 130: ----------+---------------------------------
! 131: UBSan | works with micro-UBSan
! 132:
! 133: ### LLVM with kernel sanitizers
! 134:
! 135: Name | NetBSD status
! 136: ----------+---------------------------------
! 137: UBSan | works with micro-UBSan
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb