diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2023-07-19 14:14:10 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2023-07-20 07:33:29 +0000 |
| commit | d922ca7efda29b23dfb85abe37aee1641c4fbe05 (patch) | |
| tree | 7c7d78500ef5536f36717c45de2e0adeb1a62a33 | |
| parent | 37668e463d42d68846539559443ec458c9b05acb (diff) | |
syz-ci: specify per-manager bisection backports
It might be the case that the kernels that are being fuzzed on syz-ci
require their own backports to build/test older revisions during
bisection.
Let users specify it in the syz-ci config.
| -rw-r--r-- | pkg/bisect/bisect.go | 7 | ||||
| -rw-r--r-- | pkg/vcs/linux.go | 3 | ||||
| -rw-r--r-- | pkg/vcs/testos.go | 1 | ||||
| -rw-r--r-- | pkg/vcs/vcs.go | 3 | ||||
| -rw-r--r-- | syz-ci/jobs.go | 1 | ||||
| -rw-r--r-- | syz-ci/syz-ci.go | 3 | ||||
| -rw-r--r-- | tools/syz-bisect/bisect.go | 8 | ||||
| -rw-r--r-- | tools/syz-testbuild/testbuild.go | 2 |
8 files changed, 21 insertions, 7 deletions
diff --git a/pkg/bisect/bisect.go b/pkg/bisect/bisect.go index dab1cb27c..cd20cca07 100644 --- a/pkg/bisect/bisect.go +++ b/pkg/bisect/bisect.go @@ -58,6 +58,8 @@ type KernelConfig struct { // this minimized one. BaselineConfig []byte Userspace string + // Extra commits to cherry pick to older kernel revisions. + Backports []vcs.BackportCommit } type SyzkallerConfig struct { @@ -566,7 +568,10 @@ func (env *env) build() (*vcs.Commit, string, error) { } bisectEnv, err := env.bisecter.EnvForCommit( - env.cfg.DefaultCompiler, env.cfg.CompilerType, env.cfg.BinDir, current.Hash, env.kernelConfig) + env.cfg.DefaultCompiler, env.cfg.CompilerType, + env.cfg.BinDir, current.Hash, env.kernelConfig, + env.cfg.Kernel.Backports, + ) if err != nil { return current, "", err } diff --git a/pkg/vcs/linux.go b/pkg/vcs/linux.go index 16e1c79fa..589c300b8 100644 --- a/pkg/vcs/linux.go +++ b/pkg/vcs/linux.go @@ -139,6 +139,7 @@ func gitReleaseTagToInt(tag string, includeRC bool) uint64 { func (ctx *linux) EnvForCommit( defaultCompiler, compilerType, binDir, commit string, kernelConfig []byte, + backports []BackportCommit, ) (*BisectEnv, error) { tagList, err := ctx.previousReleaseTags(commit, true, false, false) if err != nil { @@ -167,7 +168,7 @@ func (ctx *linux) EnvForCommit( Compiler: compiler, KernelConfig: cf.Serialize(), } - err = linuxFixBackports(ctx.git) + err = linuxFixBackports(ctx.git, backports...) if err != nil { return nil, fmt.Errorf("failed to cherry pick fixes: %w", err) } diff --git a/pkg/vcs/testos.go b/pkg/vcs/testos.go index cfc34cc23..68d9eeccd 100644 --- a/pkg/vcs/testos.go +++ b/pkg/vcs/testos.go @@ -29,6 +29,7 @@ func (ctx *testos) PreviousReleaseTags(commit, compilerType string) ([]string, e func (ctx *testos) EnvForCommit( defaultCompiler, compilerType, binDir, commit string, kernelConfig []byte, + backports []BackportCommit, ) (*BisectEnv, error) { return &BisectEnv{KernelConfig: kernelConfig}, nil } diff --git a/pkg/vcs/vcs.go b/pkg/vcs/vcs.go index 9515692ea..ae2b34174 100644 --- a/pkg/vcs/vcs.go +++ b/pkg/vcs/vcs.go @@ -93,7 +93,8 @@ type Bisecter interface { IsRelease(commit string) (bool, error) - EnvForCommit(defaultCompiler, compilerType, binDir, commit string, kernelConfig []byte) (*BisectEnv, error) + EnvForCommit(defaultCompiler, compilerType, binDir, commit string, + kernelConfig []byte, backports []BackportCommit) (*BisectEnv, error) } type ConfigMinimizer interface { diff --git a/syz-ci/jobs.go b/syz-ci/jobs.go index ee62e7e03..4c10fc7b7 100644 --- a/syz-ci/jobs.go +++ b/syz-ci/jobs.go @@ -498,6 +498,7 @@ func (jp *JobProcessor) bisect(job *Job, mgrcfg *mgrconfig.Config) error { Config: req.KernelConfig, BaselineConfig: baseline, Userspace: mgr.mgrcfg.Userspace, + Backports: mgr.mgrcfg.BisectBackports, }, Syzkaller: bisect.SyzkallerConfig{ Repo: jp.cfg.SyzkallerRepo, diff --git a/syz-ci/syz-ci.go b/syz-ci/syz-ci.go index e7d75918d..94b574360 100644 --- a/syz-ci/syz-ci.go +++ b/syz-ci/syz-ci.go @@ -71,6 +71,7 @@ import ( "github.com/google/syzkaller/pkg/log" "github.com/google/syzkaller/pkg/mgrconfig" "github.com/google/syzkaller/pkg/osutil" + "github.com/google/syzkaller/pkg/vcs" ) var ( @@ -182,6 +183,8 @@ type ManagerConfig struct { // File with sysctl values (e.g. output of sysctl -a, optional). KernelSysctl string `json:"kernel_sysctl"` Jobs ManagerJobs `json:"jobs"` + // Extra commits to cherry pick to older kernel revisions. + BisectBackports []vcs.BackportCommit `json:"bisect_backports"` ManagerConfig json.RawMessage `json:"manager_config"` managercfg *mgrconfig.Config diff --git a/tools/syz-bisect/bisect.go b/tools/syz-bisect/bisect.go index e9b5f1b49..b74cf6fd8 100644 --- a/tools/syz-bisect/bisect.go +++ b/tools/syz-bisect/bisect.go @@ -62,9 +62,10 @@ type Config struct { // Sysctl/cmdline files used to build the image which was used to crash the kernel, e.g. see: // dashboard/config/upstream.sysctl // dashboard/config/upstream-selinux.cmdline - Sysctl string `json:"sysctl"` - Cmdline string `json:"cmdline"` - CrossTree bool `json:"cross_tree"` + Sysctl string `json:"sysctl"` + Cmdline string `json:"cmdline"` + CrossTree bool `json:"cross_tree"` + Backports []vcs.BackportCommit `json:"backports"` KernelConfig string `json:"kernel_config"` KernelBaselineConfig string `json:"kernel_baseline_config"` @@ -114,6 +115,7 @@ func main() { Userspace: mycfg.Userspace, Sysctl: mycfg.Sysctl, Cmdline: mycfg.Cmdline, + Backports: mycfg.Backports, }, Syzkaller: bisect.SyzkallerConfig{ Repo: mycfg.SyzkallerRepo, diff --git a/tools/syz-testbuild/testbuild.go b/tools/syz-testbuild/testbuild.go index dac89bfcc..daadff3e3 100644 --- a/tools/syz-testbuild/testbuild.go +++ b/tools/syz-testbuild/testbuild.go @@ -125,7 +125,7 @@ func main() { func test(repo vcs.Repo, bisecter vcs.Bisecter, kernelConfig []byte, env instance.Env, com *vcs.Commit) { compiler, compilerType, linker, ccache := "gcc", "gcc", "ld", "" - bisectEnv, err := bisecter.EnvForCommit(compiler, compilerType, *flagBisectBin, com.Hash, kernelConfig) + bisectEnv, err := bisecter.EnvForCommit(compiler, compilerType, *flagBisectBin, com.Hash, kernelConfig, nil) if err != nil { tool.Fail(err) } |
