diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2026-01-12 12:37:14 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2026-01-12 17:34:20 +0000 |
| commit | d7bccd30b388650dc50996a1f81efb9698d0781b (patch) | |
| tree | 1d9f49a96f4b98a6d32ec7011bb068bf6ce50bb3 /dashboard | |
| parent | ebb1853093b2f5c87126f8d2c5a9e17a94049246 (diff) | |
pkg/aflow/flow/assessment: add UAF moderation workflow
Add workflow that can be used for moderation of UAF bugs (consistent/actionable reports),
such UAF bugs can be upstreammed automatically, even if they happened only once
and don't have a reproducer.
Diffstat (limited to 'dashboard')
| -rw-r--r-- | dashboard/app/ai.go | 14 | ||||
| -rw-r--r-- | dashboard/app/ai_test.go | 1 |
2 files changed, 14 insertions, 1 deletions
diff --git a/dashboard/app/ai.go b/dashboard/app/ai.go index e0847ea4a..9f620384f 100644 --- a/dashboard/app/ai.go +++ b/dashboard/app/ai.go @@ -16,6 +16,7 @@ import ( "github.com/google/syzkaller/dashboard/app/aidb" "github.com/google/syzkaller/dashboard/dashapi" "github.com/google/syzkaller/pkg/aflow/ai" + "github.com/google/syzkaller/pkg/report/crash" "github.com/google/syzkaller/pkg/vcs" db "google.golang.org/appengine/v2/datastore" ) @@ -322,6 +323,7 @@ func bugJobCreate(ctx context.Context, workflow string, typ ai.WorkflowType, bug Description: bug.displayTitle(), Link: fmt.Sprintf("/bug?id=%v", bug.keyHash(ctx)), Args: spanner.NullJSON{Valid: true, Value: map[string]any{ + "BugTitle": bug.Title, "ReproOpts": string(crash.ReproOpts), "ReproSyzID": crash.ReproSyz, "ReproCID": crash.ReproC, @@ -423,11 +425,21 @@ const currentAIJobCheckSeq = 1 func workflowsForBug(bug *Bug, manual bool) map[ai.WorkflowType]bool { workflows := make(map[ai.WorkflowType]bool) - if strings.HasPrefix(bug.Title, "KCSAN: data-race") { + typ := crash.TitleToType(bug.Title) + // UAF bugs stuck in last but one reporting. + if typ.IsUAF() && len(bug.Reporting) > 1 && + bug.Reporting[len(bug.Reporting)-1].Reported.IsZero() && + !bug.Reporting[len(bug.Reporting)-2].Reported.IsZero() { + workflows[ai.WorkflowModeration] = true + } + if typ == crash.KCSANDataRace { workflows[ai.WorkflowAssessmentKCSAN] = true } if manual { // Types we don't create automatically yet, but can be created manually. + if typ.IsUAF() { + workflows[ai.WorkflowModeration] = true + } if bug.HeadReproLevel > dashapi.ReproLevelNone { workflows[ai.WorkflowPatching] = true } diff --git a/dashboard/app/ai_test.go b/dashboard/app/ai_test.go index b5e686dfa..e378e77b4 100644 --- a/dashboard/app/ai_test.go +++ b/dashboard/app/ai_test.go @@ -124,6 +124,7 @@ func TestAIJob(t *testing.T) { require.NotEqual(t, resp.ID, "") require.Equal(t, resp.Workflow, "assessment-kcsan") require.Equal(t, resp.Args, map[string]any{ + "BugTitle": "KCSAN: data-race in foo / bar", "CrashReport": "report1", "KernelRepo": "repo1", "KernelCommit": "1111111111111111111111111111111111111111", |
