1243791Sdim//===--- Sanitizers.def - Runtime sanitizer options -------------*- C++ -*-===// 2243791Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6243791Sdim// 7243791Sdim//===----------------------------------------------------------------------===// 8243791Sdim// 9243791Sdim// This file defines the options for specifying which runtime sanitizers to 10243791Sdim// enable. Users of this file must define the SANITIZER macro to make use of 11243791Sdim// this information. Users of this file can also define the SANITIZER_GROUP 12243791Sdim// macro to get information on options which refer to sets of sanitizers. 13243791Sdim// 14243791Sdim//===----------------------------------------------------------------------===// 15243791Sdim 16243791Sdim#ifndef SANITIZER 17243791Sdim#error "Define SANITIZER prior to including this file!" 18243791Sdim#endif 19243791Sdim 20243791Sdim// SANITIZER(NAME, ID) 21243791Sdim 22243791Sdim// The first value is the name of the sanitizer as a string. The sanitizer can 23243791Sdim// be enabled by specifying -fsanitize=NAME. 24243791Sdim 25243791Sdim// The second value is an identifier which can be used to refer to the 26243791Sdim// sanitizer. 27243791Sdim 28243791Sdim 29243791Sdim// SANITIZER_GROUP(NAME, ID, ALIAS) 30243791Sdim 31243791Sdim// The first two values have the same semantics as the corresponding SANITIZER 32243791Sdim// values. The third value is an expression ORing together the IDs of individual 33243791Sdim// sanitizers in this group. 34243791Sdim 35243791Sdim#ifndef SANITIZER_GROUP 36243791Sdim#define SANITIZER_GROUP(NAME, ID, ALIAS) 37243791Sdim#endif 38243791Sdim 39243791Sdim 40243791Sdim// AddressSanitizer 41243791SdimSANITIZER("address", Address) 42243791Sdim 43353358Sdim// Requires AddressSanitizer 44353358SdimSANITIZER("pointer-compare", PointerCompare) 45353358Sdim 46353358Sdim// Requires AddressSanitizer 47353358SdimSANITIZER("pointer-subtract", PointerSubtract) 48353358Sdim 49288943Sdim// Kernel AddressSanitizer (KASan) 50288943SdimSANITIZER("kernel-address", KernelAddress) 51288943Sdim 52341825Sdim// Hardware-assisted AddressSanitizer 53327952SdimSANITIZER("hwaddress", HWAddress) 54327952Sdim 55341825Sdim// Kernel Hardware-assisted AddressSanitizer (KHWASan) 56341825SdimSANITIZER("kernel-hwaddress", KernelHWAddress) 57341825Sdim 58353358Sdim// A variant of AddressSanitizer using AArch64 MTE extension. 59353358SdimSANITIZER("memtag", MemTag) 60353358Sdim 61249423Sdim// MemorySanitizer 62249423SdimSANITIZER("memory", Memory) 63249423Sdim 64344779Sdim// Kernel MemorySanitizer (KMSAN) 65344779SdimSANITIZER("kernel-memory", KernelMemory) 66344779Sdim 67321369Sdim// libFuzzer 68321369SdimSANITIZER("fuzzer", Fuzzer) 69321369Sdim 70327952Sdim// libFuzzer-required instrumentation, no linking. 71327952SdimSANITIZER("fuzzer-no-link", FuzzerNoLink) 72327952Sdim 73243791Sdim// ThreadSanitizer 74243791SdimSANITIZER("thread", Thread) 75243791Sdim 76261991Sdim// LeakSanitizer 77261991SdimSANITIZER("leak", Leak) 78261991Sdim 79243791Sdim// UndefinedBehaviorSanitizer 80249423SdimSANITIZER("alignment", Alignment) 81261991SdimSANITIZER("array-bounds", ArrayBounds) 82249423SdimSANITIZER("bool", Bool) 83327952SdimSANITIZER("builtin", Builtin) 84249423SdimSANITIZER("enum", Enum) 85249423SdimSANITIZER("float-cast-overflow", FloatCastOverflow) 86249423SdimSANITIZER("float-divide-by-zero", FloatDivideByZero) 87261991SdimSANITIZER("function", Function) 88249423SdimSANITIZER("integer-divide-by-zero", IntegerDivideByZero) 89280031SdimSANITIZER("nonnull-attribute", NonnullAttribute) 90249423SdimSANITIZER("null", Null) 91321369SdimSANITIZER("nullability-arg", NullabilityArg) 92321369SdimSANITIZER("nullability-assign", NullabilityAssign) 93321369SdimSANITIZER("nullability-return", NullabilityReturn) 94321369SdimSANITIZER_GROUP("nullability", Nullability, 95321369Sdim NullabilityArg | NullabilityAssign | NullabilityReturn) 96249423SdimSANITIZER("object-size", ObjectSize) 97321369SdimSANITIZER("pointer-overflow", PointerOverflow) 98249423SdimSANITIZER("return", Return) 99280031SdimSANITIZER("returns-nonnull-attribute", ReturnsNonnullAttribute) 100288943SdimSANITIZER("shift-base", ShiftBase) 101288943SdimSANITIZER("shift-exponent", ShiftExponent) 102288943SdimSANITIZER_GROUP("shift", Shift, ShiftBase | ShiftExponent) 103243791SdimSANITIZER("signed-integer-overflow", SignedIntegerOverflow) 104243791SdimSANITIZER("unreachable", Unreachable) 105243791SdimSANITIZER("vla-bound", VLABound) 106243791SdimSANITIZER("vptr", Vptr) 107243791Sdim 108249423Sdim// IntegerSanitizer 109249423SdimSANITIZER("unsigned-integer-overflow", UnsignedIntegerOverflow) 110249423Sdim 111261991Sdim// DataFlowSanitizer 112261991SdimSANITIZER("dataflow", DataFlow) 113261991Sdim 114288943Sdim// Control Flow Integrity 115288943SdimSANITIZER("cfi-cast-strict", CFICastStrict) 116288943SdimSANITIZER("cfi-derived-cast", CFIDerivedCast) 117296417SdimSANITIZER("cfi-icall", CFIICall) 118341825SdimSANITIZER("cfi-mfcall", CFIMFCall) 119288943SdimSANITIZER("cfi-unrelated-cast", CFIUnrelatedCast) 120288943SdimSANITIZER("cfi-nvcall", CFINVCall) 121288943SdimSANITIZER("cfi-vcall", CFIVCall) 122288943SdimSANITIZER_GROUP("cfi", CFI, 123341825Sdim CFIDerivedCast | CFIICall | CFIMFCall | CFIUnrelatedCast | 124341825Sdim CFINVCall | CFIVCall) 125288943Sdim 126288943Sdim// Safe Stack 127288943SdimSANITIZER("safe-stack", SafeStack) 128288943Sdim 129341825Sdim// Shadow Call Stack 130341825SdimSANITIZER("shadow-call-stack", ShadowCallStack) 131341825Sdim 132249423Sdim// -fsanitize=undefined includes all the sanitizers which have low overhead, no 133249423Sdim// ABI or address space layout implications, and only catch undefined behavior. 134243791SdimSANITIZER_GROUP("undefined", Undefined, 135327952Sdim Alignment | Bool | Builtin | ArrayBounds | Enum | 136353358Sdim FloatCastOverflow | 137327952Sdim IntegerDivideByZero | NonnullAttribute | Null | ObjectSize | 138327952Sdim PointerOverflow | Return | ReturnsNonnullAttribute | Shift | 139327952Sdim SignedIntegerOverflow | Unreachable | VLABound | Function | 140327952Sdim Vptr) 141249423Sdim 142288943Sdim// -fsanitize=undefined-trap is an alias for -fsanitize=undefined. 143288943SdimSANITIZER_GROUP("undefined-trap", UndefinedTrap, Undefined) 144288943Sdim 145341825Sdim// ImplicitConversionSanitizer 146344779SdimSANITIZER("implicit-unsigned-integer-truncation", 147344779Sdim ImplicitUnsignedIntegerTruncation) 148344779SdimSANITIZER("implicit-signed-integer-truncation", ImplicitSignedIntegerTruncation) 149344779SdimSANITIZER_GROUP("implicit-integer-truncation", ImplicitIntegerTruncation, 150344779Sdim ImplicitUnsignedIntegerTruncation | 151344779Sdim ImplicitSignedIntegerTruncation) 152344779Sdim 153344779SdimSANITIZER("implicit-integer-sign-change", ImplicitIntegerSignChange) 154344779Sdim 155344779SdimSANITIZER_GROUP("implicit-integer-arithmetic-value-change", 156344779Sdim ImplicitIntegerArithmeticValueChange, 157344779Sdim ImplicitIntegerSignChange | ImplicitSignedIntegerTruncation) 158344779Sdim 159344779Sdim// FIXME: 160344779Sdim//SANITIZER_GROUP("implicit-integer-conversion", ImplicitIntegerConversion, 161344779Sdim// ImplicitIntegerArithmeticValueChange | 162344779Sdim// ImplicitUnsignedIntegerTruncation) 163344779Sdim//SANITIZER_GROUP("implicit-conversion", ImplicitConversion, 164344779Sdim// ImplicitIntegerConversion) 165344779Sdim 166341825SdimSANITIZER_GROUP("implicit-conversion", ImplicitConversion, 167344779Sdim ImplicitIntegerArithmeticValueChange | 168344779Sdim ImplicitUnsignedIntegerTruncation) 169341825Sdim 170249423SdimSANITIZER_GROUP("integer", Integer, 171344779Sdim ImplicitConversion | IntegerDivideByZero | Shift | 172341825Sdim SignedIntegerOverflow | UnsignedIntegerOverflow) 173249423Sdim 174261991SdimSANITIZER("local-bounds", LocalBounds) 175261991SdimSANITIZER_GROUP("bounds", Bounds, ArrayBounds | LocalBounds) 176261991Sdim 177327952Sdim// Scudo hardened allocator 178327952SdimSANITIZER("scudo", Scudo) 179327952Sdim 180280031Sdim// Magic group, containing all sanitizers. For example, "-fno-sanitize=all" 181280031Sdim// can be used to disable all the sanitizers. 182353358SdimSANITIZER_GROUP("all", All, ~SanitizerMask()) 183280031Sdim 184243791Sdim#undef SANITIZER 185243791Sdim#undef SANITIZER_GROUP 186