diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2026-01-12 22:47:10 +0100 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2026-01-13 14:18:14 +0000 |
| commit | 393201ac23707dff38037f4961f955db7e413b67 (patch) | |
| tree | ba9ad0823a72fcfb92dd90fa6e8a215c39076e4d /syz-cluster/workflow | |
| parent | 85894026b1b003844e8fda94056d80d88294b0be (diff) | |
syz-cluster: prioritize blob-based base commits
Consider Cc'd mailing lists when selecting the exact base commit.
Among the base commits determined based on blob sha value from the git
patch, first select the ones that match both the trees of the Cc'd
subsystems and their primary branches.
If it gives no exact match, select a base commit that comes from a tree
of a Cc'd subsystem. As fallback, take any subsystem tree.
This should prevent valid, but suprising patch series triage results.
Diffstat (limited to 'syz-cluster/workflow')
| -rw-r--r-- | syz-cluster/workflow/triage-step/main.go | 41 |
1 files changed, 17 insertions, 24 deletions
diff --git a/syz-cluster/workflow/triage-step/main.go b/syz-cluster/workflow/triage-step/main.go index ff2b51d26..042409f97 100644 --- a/syz-cluster/workflow/triage-step/main.go +++ b/syz-cluster/workflow/triage-step/main.go @@ -79,12 +79,6 @@ func (triager *seriesTriager) GetVerdict(ctx context.Context, sessionID string) if err != nil { return nil, fmt.Errorf("failed to query trees: %w", err) } - selectedTrees := triage.SelectTrees(series, treesResp.Trees) - if len(selectedTrees) == 0 { - return &api.TriageResult{ - SkipReason: "no suitable base kernel trees found", - }, nil - } fuzzConfigs := triage.MergeKernelFuzzConfigs(triage.SelectFuzzConfigs(series, treesResp.FuzzTargets)) if len(fuzzConfigs) == 0 { return &api.TriageResult{ @@ -93,7 +87,7 @@ func (triager *seriesTriager) GetVerdict(ctx context.Context, sessionID string) } ret := &api.TriageResult{} for _, campaign := range fuzzConfigs { - fuzzTask, err := triager.prepareFuzzingTask(ctx, series, selectedTrees, campaign) + fuzzTask, err := triager.prepareFuzzingTask(ctx, series, treesResp.Trees, campaign) var skipErr *SkipTriageError if errors.As(err, &skipErr) { ret.SkipReason = skipErr.Reason.Error() @@ -123,7 +117,7 @@ func (triager *seriesTriager) prepareFuzzingTask(ctx context.Context, series *ap } } if result != nil { - triager.Log("continuing with %+v", result) + triager.Log("continuing with %v in %v", result.Commit, result.Tree.Name) base := api.BuildRequest{ TreeName: result.Tree.Name, TreeURL: result.Tree.URL, @@ -158,31 +152,30 @@ func (triager *seriesTriager) selectFromBlobs(series *api.Series, trees []*api.T diff = append(diff, patch.Body...) diff = append(diff, '\n') } - base, err := triager.ops.BaseForDiff(diff, triager.DebugTracer) + baseList, err := triager.ops.BaseForDiff(diff, triager.DebugTracer) if err != nil { return nil, err - } else if base == nil { + } + tree, commit := triage.FromBaseCommits(series, baseList, trees) + if tree == nil { triager.Log("no candidate base commit is found") return nil, nil } - for _, branch := range base.Branches { - tree := triage.TreeFromBranch(trees, branch) - if tree != nil { - return &SelectResult{ - Tree: tree, - Commit: base.Hash, - Arch: fuzzArch, - }, nil - } - } - triager.Log("cannot identify the tree from %q", base.Branches) - return nil, nil + return &SelectResult{ + Tree: tree, + Commit: commit, + Arch: fuzzArch, + }, nil } func (triager *seriesTriager) selectFromList(ctx context.Context, series *api.Series, trees []*api.Tree, target *triage.MergedFuzzConfig) (*SelectResult, error) { - skipErr := SkipError("empty tree list") - for _, tree := range trees { + selectedTrees := triage.SelectTrees(series, trees) + if len(selectedTrees) == 0 { + return nil, SkipError("no suitable base kernel trees found") + } + var skipErr error + for _, tree := range selectedTrees { triager.Log("considering tree %q", tree.Name) lastBuild, err := triager.client.LastBuild(ctx, &api.LastBuildReq{ Arch: fuzzArch, |
