aboutsummaryrefslogtreecommitdiffstats
path: root/syz-ci
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2023-07-17 18:08:56 +0200
committerAleksandr Nogikh <nogikh@google.com>2023-07-25 08:23:29 +0000
commite06c669f49a06146914b04a1fbbdd21a0bf1d7b1 (patch)
treedc4a1b32a67606741f49d7cbf6a07055b919b86c /syz-ci
parent67db6ccb7357714a0299fe9f3d192a26bd32ac4e (diff)
all: support cross-tree fix bisection
If tree origin assessment code has identified that the bug is not reproducible in a tree from which we merge/cherry-pick commits, use fix bisection to identify that commit. This can e.g. be used to find fixing commits that were not backported from Linux kernel mainline into LTS branches. In case of bisection errors, re-do such jobs every 30 days. Remember in the Bug structure whether there's a fix candidate and return the details in the full bug info API query.
Diffstat (limited to 'syz-ci')
-rw-r--r--syz-ci/jobs.go31
1 files changed, 28 insertions, 3 deletions
diff --git a/syz-ci/jobs.go b/syz-ci/jobs.go
index a0f838e7b..cc7c12908 100644
--- a/syz-ci/jobs.go
+++ b/syz-ci/jobs.go
@@ -397,7 +397,10 @@ func (jp *JobProcessor) process(job *Job) *dashapi.JobDoneReq {
jp.Errorf("%s", err)
return job.resp
}
-
+ if req.KernelRepo == "" {
+ req.KernelRepo = mgr.mgrcfg.Repo
+ req.KernelRepo = mgr.mgrcfg.Branch
+ }
required := []struct {
name string
ok bool
@@ -455,6 +458,10 @@ func (jp *JobProcessor) bisect(job *Job, mgrcfg *mgrconfig.Config) error {
return fmt.Errorf("failed to read baseline config: %w", err)
}
}
+ err := jp.prepareBisectionRepo(mgrcfg, req)
+ if err != nil {
+ return err
+ }
trace := new(bytes.Buffer)
cfg := &bisect.Config{
Trace: &debugtracer.GenericTracer{
@@ -485,8 +492,8 @@ func (jp *JobProcessor) bisect(job *Job, mgrcfg *mgrconfig.Config) error {
Linker: mgr.mgrcfg.Linker,
Ccache: jp.cfg.Ccache,
Kernel: bisect.KernelConfig{
- Repo: mgr.mgrcfg.Repo,
- Branch: mgr.mgrcfg.Branch,
+ Repo: req.KernelRepo,
+ Branch: req.KernelBranch,
Commit: req.KernelCommit,
CommitTitle: req.KernelCommitTitle,
Cmdline: mgr.mgrcfg.KernelCmdline,
@@ -505,6 +512,7 @@ func (jp *JobProcessor) bisect(job *Job, mgrcfg *mgrconfig.Config) error {
Syz: req.ReproSyz,
C: req.ReproC,
},
+ CrossTree: req.MergeBaseRepo != "",
Manager: mgrcfg,
BuildSemaphore: buildSem,
TestSemaphore: testSem,
@@ -656,6 +664,23 @@ func (jp *JobProcessor) testPatch(job *Job, mgrcfg *mgrconfig.Config) error {
return nil
}
+func (jp *JobProcessor) prepareBisectionRepo(mgrcfg *mgrconfig.Config, req *dashapi.JobPollResp) error {
+ if req.MergeBaseRepo == "" {
+ // No need to.
+ return nil
+ }
+ repo, err := vcs.NewRepo(mgrcfg.TargetOS, mgrcfg.Type, mgrcfg.KernelSrc)
+ if err != nil {
+ return fmt.Errorf("failed to create kernel repo: %w", err)
+ }
+ _, err = checkoutKernelOrCommit(repo, req.MergeBaseRepo, req.MergeBaseBranch)
+ if err != nil {
+ return fmt.Errorf("failed to checkout the merge base repo %v on %v: %w",
+ req.MergeBaseRepo, req.MergeBaseBranch, err)
+ }
+ return nil
+}
+
func (jp *JobProcessor) checkoutJobCommit(job *Job, repo vcs.Repo) (*vcs.Commit, error) {
req, resp := job.req, job.resp
var kernelCommit *vcs.Commit