aboutsummaryrefslogtreecommitdiffstats
path: root/syz-cluster/workflow
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2026-01-12 22:47:10 +0100
committerAleksandr Nogikh <nogikh@google.com>2026-01-13 14:18:14 +0000
commit393201ac23707dff38037f4961f955db7e413b67 (patch)
treeba9ad0823a72fcfb92dd90fa6e8a215c39076e4d /syz-cluster/workflow
parent85894026b1b003844e8fda94056d80d88294b0be (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.go41
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,