diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2023-07-17 18:08:56 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2023-07-25 08:23:29 +0000 |
| commit | e06c669f49a06146914b04a1fbbdd21a0bf1d7b1 (patch) | |
| tree | dc4a1b32a67606741f49d7cbf6a07055b919b86c /syz-ci | |
| parent | 67db6ccb7357714a0299fe9f3d192a26bd32ac4e (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.go | 31 |
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 |
