From 2a509c272e4ec35c770b5ec42f321e66ce525a11 Mon Sep 17 00:00:00 2001 From: Florent Revest Date: Wed, 19 Jul 2023 18:04:08 +0200 Subject: pkg/report: gather Go runtime bugs under one bug When a "fatal error:" bug is reported, this usually means that syzkaller itself had a memory corruption (except in the gVisor fuzzing case where this could be an actual bug in gVisor) Most likely, this is due to a kernel that went wild and corrupted the syzkaller address space, but in that case the exact details of what part of the runtime failed are rarely relevant. This gathers all these go runtime errors under one umbrella so they are easier to track. Except for gVisor on which the logic is kept the same as existing. Add three test cases to the linux reporting: - 705 (equivalent to the current all/report/7) to make sure Go OOO are suppressed (they have a different title now but still get suppressed) - 706 (equivalent to the current all/report/8) to make sure that ALSA "fatal errors" are not handled as Go fatal errors - 707 (new) to make sure that reports like https://syzkaller.appspot.com/bug?extid=3f00d7083c52713ba3b0 are re-named to "go runtime error" --- pkg/report/akaros.go | 1 + pkg/report/darwin.go | 1 + pkg/report/freebsd.go | 1 + pkg/report/fuchsia.go | 1 + pkg/report/gvisor.go | 12 ++++++++++++ pkg/report/linux.go | 1 + pkg/report/netbsd.go | 1 + pkg/report/openbsd.go | 1 + pkg/report/report.go | 25 +++++++++++++------------ pkg/report/testdata/all/report/7 | 15 --------------- pkg/report/testdata/all/report/8 | 2 -- pkg/report/testdata/gvisor/report/29 | 15 +++++++++++++++ pkg/report/testdata/linux/report/705 | 15 +++++++++++++++ pkg/report/testdata/linux/report/706 | 2 ++ pkg/report/testdata/linux/report/707 | 6 ++++++ 15 files changed, 70 insertions(+), 29 deletions(-) delete mode 100644 pkg/report/testdata/all/report/7 delete mode 100644 pkg/report/testdata/all/report/8 create mode 100644 pkg/report/testdata/gvisor/report/29 create mode 100644 pkg/report/testdata/linux/report/705 create mode 100644 pkg/report/testdata/linux/report/706 create mode 100644 pkg/report/testdata/linux/report/707 (limited to 'pkg') diff --git a/pkg/report/akaros.go b/pkg/report/akaros.go index b097cc664..e212d608f 100644 --- a/pkg/report/akaros.go +++ b/pkg/report/akaros.go @@ -191,4 +191,5 @@ var akarosOopses = append([]*oops{ []*regexp.Regexp{}, crash.UnknownType, }, + &groupGoRuntimeErrors, }, commonOopses...) diff --git a/pkg/report/darwin.go b/pkg/report/darwin.go index 8b257b9bf..24ec74ab0 100644 --- a/pkg/report/darwin.go +++ b/pkg/report/darwin.go @@ -58,4 +58,5 @@ var darwinOopses = append([]*oops{ []*regexp.Regexp{}, crash.UnknownType, }, + &groupGoRuntimeErrors, }, commonOopses...) diff --git a/pkg/report/freebsd.go b/pkg/report/freebsd.go index b75135e18..99d87b29d 100644 --- a/pkg/report/freebsd.go +++ b/pkg/report/freebsd.go @@ -106,4 +106,5 @@ var freebsdOopses = append([]*oops{ []*regexp.Regexp{}, crash.UnknownType, }, + &groupGoRuntimeErrors, }, commonOopses...) diff --git a/pkg/report/fuchsia.go b/pkg/report/fuchsia.go index 157ae9a4a..c9d7a10c8 100644 --- a/pkg/report/fuchsia.go +++ b/pkg/report/fuchsia.go @@ -323,4 +323,5 @@ var zirconOopses = append([]*oops{ }, crash.UnknownType, }, + &groupGoRuntimeErrors, }, commonOopses...) diff --git a/pkg/report/gvisor.go b/pkg/report/gvisor.go index 268065e59..00c8e927c 100644 --- a/pkg/report/gvisor.go +++ b/pkg/report/gvisor.go @@ -170,4 +170,16 @@ var gvisorOopses = append([]*oops{ []*regexp.Regexp{}, crash.UnknownType, }, + { + []byte("fatal error:"), + []oopsFormat{ + { + title: compile("fatal error:(.*)"), + fmt: "fatal error:%[1]v", + noStackTrace: true, + }, + }, + []*regexp.Regexp{}, + crash.UnknownType, + }, }, commonOopses...) diff --git a/pkg/report/linux.go b/pkg/report/linux.go index 7e7ea0d89..fd63bf7e4 100644 --- a/pkg/report/linux.go +++ b/pkg/report/linux.go @@ -2457,4 +2457,5 @@ var linuxOopses = append([]*oops{ []*regexp.Regexp{}, crash.UnknownType, }, + &groupGoRuntimeErrors, }, commonOopses...) diff --git a/pkg/report/netbsd.go b/pkg/report/netbsd.go index 6097bbf4b..87509ac91 100644 --- a/pkg/report/netbsd.go +++ b/pkg/report/netbsd.go @@ -80,4 +80,5 @@ var netbsdOopses = append([]*oops{ []*regexp.Regexp{}, crash.UnknownType, }, + &groupGoRuntimeErrors, }, commonOopses...) diff --git a/pkg/report/openbsd.go b/pkg/report/openbsd.go index 67a2fc092..f4ea30e3f 100644 --- a/pkg/report/openbsd.go +++ b/pkg/report/openbsd.go @@ -168,4 +168,5 @@ var openbsdOopses = append([]*oops{ }, crash.UnknownType, }, + &groupGoRuntimeErrors, }, commonOopses...) diff --git a/pkg/report/report.go b/pkg/report/report.go index 24029d092..4bf0adead 100644 --- a/pkg/report/report.go +++ b/pkg/report/report.go @@ -804,18 +804,19 @@ var commonOopses = []*oops{ }, crash.UnknownType, }, - { - []byte("fatal error:"), - []oopsFormat{ - { - title: compile("fatal error:(.*)"), - fmt: "fatal error:%[1]v", - noStackTrace: true, - }, - }, - []*regexp.Regexp{ - compile("ALSA"), +} + +var groupGoRuntimeErrors = oops{ + []byte("fatal error:"), + []oopsFormat{ + { + title: compile("fatal error:"), + fmt: "go runtime error", + noStackTrace: true, }, - crash.UnknownType, }, + []*regexp.Regexp{ + compile("ALSA"), + }, + crash.UnknownType, } diff --git a/pkg/report/testdata/all/report/7 b/pkg/report/testdata/all/report/7 deleted file mode 100644 index 69be284d9..000000000 --- a/pkg/report/testdata/all/report/7 +++ /dev/null @@ -1,15 +0,0 @@ -TITLE: fatal error: out of memory -SUPPRESSED: Y - -runtime: out of memory: cannot allocate 1073741824-byte block (6446022656 in use) -fatal error: out of memory - -goroutine 1 [running]: -runtime.throw({0x4772bc?, 0x20000?}) - runtime/panic.go:1047 +0x5d fp=0xc000184e38 sp=0xc000184e08 pc=0x42ea1d -runtime.(*mcache).allocLarge(0xc0000b0a00?, 0x40000000, 0x1) - runtime/mcache.go:236 +0x178 fp=0xc000184e80 sp=0xc000184e38 pc=0x411318 -runtime.mallocgc(0x40000000, 0x46a9c0, 0x1) - runtime/malloc.go:1053 +0x4f7 fp=0xc000184ee8 sp=0xc000184e80 pc=0x40b157 - - diff --git a/pkg/report/testdata/all/report/8 b/pkg/report/testdata/all/report/8 deleted file mode 100644 index 4b7e087b1..000000000 --- a/pkg/report/testdata/all/report/8 +++ /dev/null @@ -1,2 +0,0 @@ - -[ 471.848871][T11685] ALSA: seq fatal error: cannot create timer (-22) diff --git a/pkg/report/testdata/gvisor/report/29 b/pkg/report/testdata/gvisor/report/29 new file mode 100644 index 000000000..69be284d9 --- /dev/null +++ b/pkg/report/testdata/gvisor/report/29 @@ -0,0 +1,15 @@ +TITLE: fatal error: out of memory +SUPPRESSED: Y + +runtime: out of memory: cannot allocate 1073741824-byte block (6446022656 in use) +fatal error: out of memory + +goroutine 1 [running]: +runtime.throw({0x4772bc?, 0x20000?}) + runtime/panic.go:1047 +0x5d fp=0xc000184e38 sp=0xc000184e08 pc=0x42ea1d +runtime.(*mcache).allocLarge(0xc0000b0a00?, 0x40000000, 0x1) + runtime/mcache.go:236 +0x178 fp=0xc000184e80 sp=0xc000184e38 pc=0x411318 +runtime.mallocgc(0x40000000, 0x46a9c0, 0x1) + runtime/malloc.go:1053 +0x4f7 fp=0xc000184ee8 sp=0xc000184e80 pc=0x40b157 + + diff --git a/pkg/report/testdata/linux/report/705 b/pkg/report/testdata/linux/report/705 new file mode 100644 index 000000000..4557d1c6b --- /dev/null +++ b/pkg/report/testdata/linux/report/705 @@ -0,0 +1,15 @@ +TITLE: go runtime error +SUPPRESSED: Y + +runtime: out of memory: cannot allocate 1073741824-byte block (6446022656 in use) +fatal error: out of memory + +goroutine 1 [running]: +runtime.throw({0x4772bc?, 0x20000?}) + runtime/panic.go:1047 +0x5d fp=0xc000184e38 sp=0xc000184e08 pc=0x42ea1d +runtime.(*mcache).allocLarge(0xc0000b0a00?, 0x40000000, 0x1) + runtime/mcache.go:236 +0x178 fp=0xc000184e80 sp=0xc000184e38 pc=0x411318 +runtime.mallocgc(0x40000000, 0x46a9c0, 0x1) + runtime/malloc.go:1053 +0x4f7 fp=0xc000184ee8 sp=0xc000184e80 pc=0x40b157 + + diff --git a/pkg/report/testdata/linux/report/706 b/pkg/report/testdata/linux/report/706 new file mode 100644 index 000000000..4b7e087b1 --- /dev/null +++ b/pkg/report/testdata/linux/report/706 @@ -0,0 +1,2 @@ + +[ 471.848871][T11685] ALSA: seq fatal error: cannot create timer (-22) diff --git a/pkg/report/testdata/linux/report/707 b/pkg/report/testdata/linux/report/707 new file mode 100644 index 000000000..b059e07ea --- /dev/null +++ b/pkg/report/testdata/linux/report/707 @@ -0,0 +1,6 @@ +TITLE: go runtime error + +fatal error: runtimer: bad p + +runtime stack: +fatal: bad g in signal handler \ No newline at end of file -- cgit mrf-deployment