aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2025-07-04 12:36:55 +0200
committerTaras Madan <tarasmadan@google.com>2025-07-04 10:53:06 +0000
commit67b9eceff1ab48422b9c4934bd832124352c01ad (patch)
treefa6442c37cfd7898965849a69c8fde47467e8149 /pkg
parent528e2a84d2ba91a865c1689c1372db12509bf115 (diff)
pkg/report: split crash.KFENCE
Diffstat (limited to 'pkg')
-rw-r--r--pkg/report/crash/types.go56
-rw-r--r--pkg/report/linux.go4
-rw-r--r--pkg/report/title_to_type.go44
3 files changed, 76 insertions, 28 deletions
diff --git a/pkg/report/crash/types.go b/pkg/report/crash/types.go
index 1b9457d1d..b93c80856 100644
--- a/pkg/report/crash/types.go
+++ b/pkg/report/crash/types.go
@@ -10,31 +10,37 @@ type Type string
const (
UnknownType = Type("")
// keep-sorted start
- AtomicSleep = Type("ATOMIC_SLEEP")
- Bug = Type("BUG")
- DoS = Type("DoS")
- Hang = Type("HANG")
- KASANInvalidFree = Type("KASAN-INVALID-FREE")
- KASANRead = Type("KASAN-READ")
- KASANUnknown = Type("KASAN-UNKNOWN")
- KASANUseAfterFreeRead = Type("KASAN-USE-AFTER-FREE-READ")
- KASANUseAfterFreeWrite = Type("KASAN-USE-AFTER-FREE-WRITE")
- KASANWrite = Type("KASAN-WRITE")
- KCSANAssert = Type("KCSAN-ASSERT")
- KCSANDataRace = Type("KCSAN-DATARACE")
- KCSANUnknown = Type("KCSAN-UNKNOWN")
- KFENCE = Type("KFENCE")
- KMSANInfoLeak = Type("KMSAN-INFO-LEAK")
- KMSANUninitValue = Type("KMSAN-UNINIT-VALUE")
- KMSANUnknown = Type("KMSAN-UNKNOWN")
- KMSANUseAfterFreeRead = Type("KMSAN-USE-AFTER-FREE-READ")
- LockdepBug = Type("LOCKDEP")
- MemoryLeak = Type("LEAK")
- MemorySafetyBUG = Type("MEMORY_SAFETY_BUG")
- MemorySafetyUBSAN = Type("MEMORY_SAFETY_UBSAN")
- MemorySafetyWARNING = Type("MEMORY_SAFETY_WARNING")
- UBSAN = Type("UBSAN")
- Warning = Type("WARNING")
+ AtomicSleep = Type("ATOMIC_SLEEP")
+ Bug = Type("BUG")
+ DoS = Type("DoS")
+ Hang = Type("HANG")
+ KASANInvalidFree = Type("KASAN-INVALID-FREE")
+ KASANRead = Type("KASAN-READ")
+ KASANUnknown = Type("KASAN-UNKNOWN")
+ KASANUseAfterFreeRead = Type("KASAN-USE-AFTER-FREE-READ")
+ KASANUseAfterFreeWrite = Type("KASAN-USE-AFTER-FREE-WRITE")
+ KASANWrite = Type("KASAN-WRITE")
+ KCSANAssert = Type("KCSAN-ASSERT")
+ KCSANDataRace = Type("KCSAN-DATARACE")
+ KCSANUnknown = Type("KCSAN-UNKNOWN")
+ KFENCEInvalidFree = Type("KFENCE-INVALID-FREE")
+ KFENCEMemoryCorruption = Type("KFENCE-MEMORY-CORRUPTION")
+ KFENCERead = Type("KFENCE-READ")
+ KFENCEUnknown = Type("KFENCE-UNKNOWN")
+ KFENCEUseAfterFreeRead = Type("KFENCE-USE-AFTER-FREE-READ")
+ KFENCEUseAfterFreeWrite = Type("KFENCE-USE-AFTER-FREE-WRITE")
+ KFENCEWrite = Type("KFENCE-WRITE")
+ KMSANInfoLeak = Type("KMSAN-INFO-LEAK")
+ KMSANUninitValue = Type("KMSAN-UNINIT-VALUE")
+ KMSANUnknown = Type("KMSAN-UNKNOWN")
+ KMSANUseAfterFreeRead = Type("KMSAN-USE-AFTER-FREE-READ")
+ LockdepBug = Type("LOCKDEP")
+ MemoryLeak = Type("LEAK")
+ MemorySafetyBUG = Type("MEMORY_SAFETY_BUG")
+ MemorySafetyUBSAN = Type("MEMORY_SAFETY_UBSAN")
+ MemorySafetyWARNING = Type("MEMORY_SAFETY_WARNING")
+ UBSAN = Type("UBSAN")
+ Warning = Type("WARNING")
// keep-sorted end
LostConnection = Type("LOST_CONNECTION")
SyzFailure = Type("SYZ_FAILURE")
diff --git a/pkg/report/linux.go b/pkg/report/linux.go
index ff5d6bf4e..c67274ac8 100644
--- a/pkg/report/linux.go
+++ b/pkg/report/linux.go
@@ -1526,8 +1526,8 @@ var linuxOopses = append([]*oops{
noStackTrace: true,
},
{
- title: compile("BUG: KFENCE: (use-after-free|out-of-bounds) ([a-z\\-]+) in {{FUNC}}"),
- fmt: "KFENCE: %[1]v in %[4]v",
+ title: compile("BUG: KFENCE: (use-after-free|out-of-bounds) (read|write) in {{FUNC}}"),
+ fmt: "KFENCE: %[1]v %[2]v in %[4]v",
alt: []string{"bad-access in %[4]v"},
stack: &stackFmt{
parts: []*regexp.Regexp{
diff --git a/pkg/report/title_to_type.go b/pkg/report/title_to_type.go
index 72540b6c2..6ae14a121 100644
--- a/pkg/report/title_to_type.go
+++ b/pkg/report/title_to_type.go
@@ -13,6 +13,48 @@ var titleToType = []struct {
}{
{
includePrefixes: []string{
+ "KFENCE: use-after-free write",
+ },
+ crashType: crash.KFENCEUseAfterFreeWrite,
+ },
+ {
+ includePrefixes: []string{
+ "KFENCE: use-after-free read",
+ "KFENCE: use-after-free", // Read/Write is not clear. It is at least Read.
+ },
+ crashType: crash.KFENCEUseAfterFreeRead,
+ },
+ {
+ includePrefixes: []string{
+ "KFENCE: invalid write",
+ "KFENCE: out-of-bounds write",
+ },
+ crashType: crash.KFENCEWrite,
+ },
+ {
+ includePrefixes: []string{
+ // keep-sorted start
+ "KFENCE: invalid read",
+ "KFENCE: out-of-bounds read",
+ "KFENCE: out-of-bounds", // Read/Write is not clear. It is at least Read.
+ // keep-sorted end
+ },
+ crashType: crash.KFENCERead,
+ },
+ {
+ includePrefixes: []string{
+ "KFENCE: memory corruption",
+ },
+ crashType: crash.KFENCEMemoryCorruption,
+ },
+ {
+ includePrefixes: []string{
+ "KFENCE: invalid free",
+ },
+ crashType: crash.KFENCEInvalidFree,
+ },
+ {
+ includePrefixes: []string{
"KMSAN: uninit-value",
},
crashType: crash.KMSANUninitValue,
@@ -246,7 +288,7 @@ var titleToType = []struct {
},
{
includePrefixes: []string{"KFENCE:"},
- crashType: crash.KFENCE,
+ crashType: crash.KFENCEUnknown,
},
{
includePrefixes: []string{"KMSAN:"},