diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2023-04-11 11:05:18 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <wp32pw@gmail.com> | 2023-04-13 13:39:53 +0200 |
| commit | 3cfcaa1bed770dce1e4d55a41c168a9a56f931a5 (patch) | |
| tree | d62e3c6e4a94fb8b8a69ad76b574f6777099c894 | |
| parent | 82d5e53ec0af57823952183e2e2603ce2462fb66 (diff) | |
pkg/subsystem: optionally disable monthly reports
For some subsystems (e.g. `kernel`) such reports just don't make much
sense, since there are too many incorrectly classified bugs in there.
Make it possible to exclude such subsystems from periodic reminders.
| -rw-r--r-- | dashboard/app/app_test.go | 7 | ||||
| -rw-r--r-- | dashboard/app/reporting_lists.go | 6 | ||||
| -rw-r--r-- | dashboard/app/subsystem_test.go | 34 | ||||
| -rw-r--r-- | pkg/subsystem/entities.go | 2 | ||||
| -rw-r--r-- | pkg/subsystem/linux/rules.go | 7 | ||||
| -rw-r--r-- | pkg/subsystem/linux/subsystems.go | 1 | ||||
| -rw-r--r-- | pkg/subsystem/lists/linux.go | 1 | ||||
| -rw-r--r-- | tools/syz-query-subsystems/generator.go | 13 |
8 files changed, 67 insertions, 4 deletions
diff --git a/dashboard/app/app_test.go b/dashboard/app/app_test.go index 01dd30321..7745df988 100644 --- a/dashboard/app/app_test.go +++ b/dashboard/app/app_test.go @@ -524,6 +524,13 @@ var testSubsystems = []*subsystem.Subsystem{ Lists: []string{"subsystemB@list.com"}, Maintainers: []string{"subsystemB@person.com"}, }, + { + Name: "subsystemC", + PathRules: []subsystem.PathRule{{IncludeRegexp: `c\.c`}}, + Lists: []string{"subsystemC@list.com"}, + Maintainers: []string{"subsystemC@person.com"}, + NoReminders: true, + }, } const ( diff --git a/dashboard/app/reporting_lists.go b/dashboard/app/reporting_lists.go index a82598d16..8f3332338 100644 --- a/dashboard/app/reporting_lists.go +++ b/dashboard/app/reporting_lists.go @@ -48,6 +48,9 @@ func reportingPollBugLists(c context.Context, typ string) []*dashapi.BugListRepo return rawSubsystems[i].Name < rawSubsystems[j].Name }) for _, entry := range rawSubsystems { + if entry.NoReminders { + continue + } for _, dbReport := range registry.get(ns, entry.Name) { if stateEntry.Sent >= reporting.DailyLimit { break @@ -86,6 +89,9 @@ func handleSubsystemReports(w http.ResponseWriter, r *http.Request) { reporting := nsConfig.ReportingByName(rConfig.SourceReporting) var subsystems []*Subsystem for _, entry := range nsConfig.Subsystems.Service.List() { + if entry.NoReminders { + continue + } subsystems = append(subsystems, registry.get(ns, entry.Name)) } // Poll subsystems in a round-robin manner. diff --git a/dashboard/app/subsystem_test.go b/dashboard/app/subsystem_test.go index 2ce3980d7..80dd7863c 100644 --- a/dashboard/app/subsystem_test.go +++ b/dashboard/app/subsystem_test.go @@ -572,3 +572,37 @@ syzbot engineers can be reached at syzkaller@googlegroups.com. c.expectNE(reply.Sender, secondReply.Sender) c.expectTrue(strings.Contains(secondReply.Body, `7 Yes WARNING: has repro 6`)) } + +func TestSubsystemRemindersNoReport(t *testing.T) { + c := NewCtx(t) + defer c.Close() + + client := c.makeClient(clientSubsystemRemind, keySubsystemRemind, true) + build := testBuild(1) + client.UploadBuild(build) + + cFirst := testCrash(build, 1) + cFirst.Title = `WARNING: c first` + cFirst.GuiltyFiles = []string{"c.c"} + client.ReportCrash(cFirst) + client.pollEmailBug() + c.advanceTime(time.Hour) + + cSecond := testCrash(build, 1) + cSecond.Title = `WARNING: c second` + cSecond.GuiltyFiles = []string{"c.c"} + client.ReportCrash(cSecond) + client.pollEmailBug() + c.advanceTime(time.Hour) + + // Report them again. + c.advanceTime(time.Hour * 24 * 14) + client.ReportCrash(cFirst) + client.ReportCrash(cSecond) + + _, err := c.GET("/cron/subsystem_reports") + c.expectOK(err) + + // Expect no reminders for subsystemC. + client.expectNoEmail() +} diff --git a/pkg/subsystem/entities.go b/pkg/subsystem/entities.go index 457e57a3e..338447ad4 100644 --- a/pkg/subsystem/entities.go +++ b/pkg/subsystem/entities.go @@ -10,6 +10,8 @@ type Subsystem struct { Lists []string Maintainers []string Parents []*Subsystem + // If NoReminders is set to true, there should be no monthly reports for the subsystem. + NoReminders bool } // ReachableParents returns the set of subsystems reachable from the current one. diff --git a/pkg/subsystem/linux/rules.go b/pkg/subsystem/linux/rules.go index 3f2149af2..d44451692 100644 --- a/pkg/subsystem/linux/rules.go +++ b/pkg/subsystem/linux/rules.go @@ -12,6 +12,8 @@ type customRules struct { // These subsystems need to be extracted even without mailing lists. // Key is the subsystem name, value is the list of raw names in MAINTAINERS. extraSubsystems map[string][]string + // For these subsystems we do not generate monthly reminders. + noReminders map[string]struct{} } var ( @@ -88,5 +90,10 @@ var ( "kernfs": {"KERNFS"}, "udf": {"UDF FILESYSTEM"}, }, + noReminders: map[string]struct{}{ + // Many misclassified bugs end up in `kernel`, so there's no sense + // in generating monthly reports for it. + "kernel": {}, + }, } ) diff --git a/pkg/subsystem/linux/subsystems.go b/pkg/subsystem/linux/subsystems.go index 880b1fcaf..1d1d84ed2 100644 --- a/pkg/subsystem/linux/subsystems.go +++ b/pkg/subsystem/linux/subsystems.go @@ -130,6 +130,7 @@ func (ctx *linuxCtx) applyExtraRules(list []*subsystem.Subsystem) { } for _, entry := range list { entry.Syscalls = ctx.extraRules.subsystemCalls[entry.Name] + _, entry.NoReminders = ctx.extraRules.noReminders[entry.Name] } } diff --git a/pkg/subsystem/lists/linux.go b/pkg/subsystem/lists/linux.go index c097c16ca..7716b0c20 100644 --- a/pkg/subsystem/lists/linux.go +++ b/pkg/subsystem/lists/linux.go @@ -2149,6 +2149,7 @@ func subsystems_linux() []*Subsystem { {IncludeRegexp: "^net/vmw_vsock/vmci_transport[^/]*$"}, {IncludeRegexp: "axp[128]"}, }, + NoReminders: true, } kernfs = Subsystem{ diff --git a/tools/syz-query-subsystems/generator.go b/tools/syz-query-subsystems/generator.go index 9b93a8151..d738be0f0 100644 --- a/tools/syz-query-subsystems/generator.go +++ b/tools/syz-query-subsystems/generator.go @@ -45,10 +45,11 @@ func generateSubsystemsFile(name string, list []*subsystem.Subsystem, commitInfo } sort.Strings(parents) subsystem := &templateSubsystem{ - VarName: varName, - Name: serializer.WriteString(entry.Name), - PathRules: serializer.WriteString(entry.PathRules), - Parents: parents, + VarName: varName, + Name: serializer.WriteString(entry.Name), + PathRules: serializer.WriteString(entry.PathRules), + Parents: parents, + NoReminders: entry.NoReminders, } // Some of the records are mostly empty. if len(entry.Maintainers) > 0 { @@ -118,6 +119,7 @@ type templateSubsystem struct { Lists string Maintainers string Parents []string + NoReminders bool } type templateVars struct { @@ -167,6 +169,9 @@ var {{range $i, $item := .List}} Parents: []*Subsystem{ {{range .Parents}} &{{.}}, {{end}} }, {{- end}} PathRules: {{.PathRules}}, +{{- if .NoReminders}} + NoReminders: true, +{{- end}} } {{end}} |
