From e06c669f49a06146914b04a1fbbdd21a0bf1d7b1 Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Mon, 17 Jul 2023 18:08:56 +0200 Subject: 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. --- syz-ci/jobs.go | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'syz-ci') 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 -- cgit mrf-deployment