github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/pkg/report/crash/types.go (about) 1 // Copyright 2023 syzkaller project authors. All rights reserved. 2 // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4 package crash 5 6 import "slices" 7 8 type Type string 9 10 const ( 11 UnknownType = Type("") 12 // keep-sorted start 13 AtomicSleep = Type("ATOMIC_SLEEP") 14 Bug = Type("BUG") 15 DoS = Type("DoS") 16 Hang = Type("HANG") 17 KASANInvalidFree = Type("KASAN-INVALID-FREE") 18 KASANNullPtrDerefRead = Type("KASAN-NULL-POINTER-DEREFERENCE-READ") 19 KASANNullPtrDerefWrite = Type("KASAN-NULL-POINTER-DEREFERENCE-WRITE") 20 KASANRead = Type("KASAN-READ") 21 KASANUnknown = Type("KASAN-UNKNOWN") 22 KASANUseAfterFreeRead = Type("KASAN-USE-AFTER-FREE-READ") 23 KASANUseAfterFreeWrite = Type("KASAN-USE-AFTER-FREE-WRITE") 24 KASANWrite = Type("KASAN-WRITE") 25 KCSANAssert = Type("KCSAN-ASSERT") 26 KCSANDataRace = Type("KCSAN-DATARACE") 27 KCSANUnknown = Type("KCSAN-UNKNOWN") 28 KFENCEInvalidFree = Type("KFENCE-INVALID-FREE") 29 KFENCEMemoryCorruption = Type("KFENCE-MEMORY-CORRUPTION") 30 KFENCERead = Type("KFENCE-READ") 31 KFENCEUnknown = Type("KFENCE-UNKNOWN") 32 KFENCEUseAfterFreeRead = Type("KFENCE-USE-AFTER-FREE-READ") 33 KFENCEUseAfterFreeWrite = Type("KFENCE-USE-AFTER-FREE-WRITE") 34 KFENCEWrite = Type("KFENCE-WRITE") 35 KMSANInfoLeak = Type("KMSAN-INFO-LEAK") 36 KMSANUninitValue = Type("KMSAN-UNINIT-VALUE") 37 KMSANUnknown = Type("KMSAN-UNKNOWN") 38 KMSANUseAfterFreeRead = Type("KMSAN-USE-AFTER-FREE-READ") 39 LockdepBug = Type("LOCKDEP") 40 MemoryLeak = Type("LEAK") 41 MemorySafetyBUG = Type("MEMORY_SAFETY_BUG") 42 MemorySafetyUBSAN = Type("MEMORY_SAFETY_UBSAN") 43 NullPtrDerefBUG = Type("NULL-POINTER-DEREFERENCE") 44 RefcountWARNING = Type("REFCOUNT_WARNING") 45 UBSAN = Type("UBSAN") 46 Warning = Type("WARNING") 47 // keep-sorted end 48 LostConnection = Type("LOST_CONNECTION") 49 SyzFailure = Type("SYZ_FAILURE") 50 UnexpectedReboot = Type("REBOOT") 51 ) 52 53 func (t Type) String() string { 54 if t == UnknownType { 55 return "UNKNOWN" 56 } 57 return string(t) 58 } 59 60 type TypeGroupPred func(Type) bool 61 62 func (t Type) IsKASAN() bool { 63 return slices.Contains([]Type{ 64 KASANNullPtrDerefRead, KASANNullPtrDerefWrite, KASANRead, KASANWrite, 65 KASANUseAfterFreeRead, KASANUseAfterFreeWrite, KASANInvalidFree, KASANUnknown}, t) 66 } 67 68 func (t Type) IsKMSAN() bool { 69 return slices.Contains([]Type{ 70 KMSANUninitValue, KMSANInfoLeak, KMSANUseAfterFreeRead, KMSANUnknown}, t) 71 } 72 73 func (t Type) IsKCSAN() bool { 74 return t == KCSANDataRace || t == KCSANAssert || t == KCSANUnknown 75 } 76 77 func (t Type) IsUBSAN() bool { 78 return t == UBSAN || t == MemorySafetyUBSAN 79 } 80 81 func (t Type) IsBUG() bool { 82 return slices.Contains([]Type{Bug, MemorySafetyBUG, NullPtrDerefBUG}, t) 83 } 84 85 func (t Type) IsWarning() bool { 86 return t == Warning || t == RefcountWARNING 87 } 88 89 func (t Type) IsBugOrWarning() bool { 90 return t.IsBUG() || t.IsWarning() 91 } 92 93 func (t Type) IsMemSafety() bool { 94 return t == MemorySafetyBUG || t == RefcountWARNING || t == MemorySafetyUBSAN 95 } 96 97 func (t Type) IsMemoryLeak() bool { 98 return t == MemoryLeak 99 } 100 101 func (t Type) IsLockingBug() bool { 102 return t.IsLockdep() || t.IsAtomicSleep() 103 } 104 105 func (t Type) IsDoS() bool { 106 return t == Bug || t == DoS 107 } 108 109 func (t Type) IsHang() bool { 110 return t == Hang 111 } 112 113 func (t Type) IsLockdep() bool { 114 return t == LockdepBug 115 } 116 117 func (t Type) IsAtomicSleep() bool { 118 return t == AtomicSleep 119 }