aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2023-07-19 14:14:10 +0200
committerAleksandr Nogikh <nogikh@google.com>2023-07-20 07:33:29 +0000
commitd922ca7efda29b23dfb85abe37aee1641c4fbe05 (patch)
tree7c7d78500ef5536f36717c45de2e0adeb1a62a33
parent37668e463d42d68846539559443ec458c9b05acb (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.go7
-rw-r--r--pkg/vcs/linux.go3
-rw-r--r--pkg/vcs/testos.go1
-rw-r--r--pkg/vcs/vcs.go3
-rw-r--r--syz-ci/jobs.go1
-rw-r--r--syz-ci/syz-ci.go3
-rw-r--r--tools/syz-bisect/bisect.go8
-rw-r--r--tools/syz-testbuild/testbuild.go2
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)
}