aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSpace Meyer <spm@google.com>2023-01-06 12:50:26 +0100
committerSpace Meyer <git@the-space.agency>2023-01-09 14:25:36 +0100
commitdf3838a1b408f22e5df7cd986138d6ec5768369d (patch)
treebddc682c0d599008033f4a3a3e8d8340c4796d91
parent1dac8c7a01e2bdd35cb04eb4901ddb157291ac2d (diff)
syz-ci/jobs: use linker supplied in syz-ci config
Previously we only used the linter from the syz-ci config when building the kernel for regular fuzzing. We were missing some plumbing to have this setting reach patch testing and bisection jobs.
-rw-r--r--pkg/bisect/bisect.go3
-rw-r--r--pkg/bisect/bisect_test.go2
-rw-r--r--pkg/instance/instance.go6
-rw-r--r--syz-ci/jobs.go5
-rw-r--r--tools/syz-testbuild/testbuild.go4
5 files changed, 12 insertions, 8 deletions
diff --git a/pkg/bisect/bisect.go b/pkg/bisect/bisect.go
index 5755bf562..ed961f537 100644
--- a/pkg/bisect/bisect.go
+++ b/pkg/bisect/bisect.go
@@ -23,6 +23,7 @@ type Config struct {
Fix bool
DefaultCompiler string
CompilerType string
+ Linker string
BinDir string
Ccache string
Timeout time.Duration
@@ -478,7 +479,7 @@ func (env *env) build() (*vcs.Commit, string, error) {
return current, "", fmt.Errorf("kernel clean failed: %v", err)
}
kern := &env.cfg.Kernel
- _, imageDetails, err := env.inst.BuildKernel(bisectEnv.Compiler, env.cfg.Ccache, kern.Userspace,
+ _, imageDetails, err := env.inst.BuildKernel(bisectEnv.Compiler, env.cfg.Linker, env.cfg.Ccache, kern.Userspace,
kern.Cmdline, kern.Sysctl, bisectEnv.KernelConfig)
if imageDetails.CompilerID != "" {
env.log("compiler: %v", imageDetails.CompilerID)
diff --git a/pkg/bisect/bisect_test.go b/pkg/bisect/bisect_test.go
index 7930e545c..79bb70400 100644
--- a/pkg/bisect/bisect_test.go
+++ b/pkg/bisect/bisect_test.go
@@ -32,7 +32,7 @@ func (env *testEnv) BuildSyzkaller(repo, commit string) (string, error) {
return "", nil
}
-func (env *testEnv) BuildKernel(compilerBin, cCache, userspaceDir, cmdlineFile, sysctlFile string,
+func (env *testEnv) BuildKernel(compilerBin, linker, cCache, userspaceDir, cmdlineFile, sysctlFile string,
kernelConfig []byte) (string, build.ImageDetails, error) {
commit := env.headCommit()
configHash := hash.String(kernelConfig)
diff --git a/pkg/instance/instance.go b/pkg/instance/instance.go
index d25eae4c5..b697ab926 100644
--- a/pkg/instance/instance.go
+++ b/pkg/instance/instance.go
@@ -29,7 +29,7 @@ import (
type Env interface {
BuildSyzkaller(string, string) (string, error)
- BuildKernel(string, string, string, string, string, []byte) (string, build.ImageDetails, error)
+ BuildKernel(string, string, string, string, string, string, []byte) (string, build.ImageDetails, error)
Test(numVMs int, reproSyz, reproOpts, reproC []byte) ([]EnvTestResult, error)
}
@@ -114,7 +114,8 @@ func (env *env) BuildSyzkaller(repoURL, commit string) (string, error) {
return buildLog, nil
}
-func (env *env) BuildKernel(compilerBin, ccacheBin, userspaceDir, cmdlineFile, sysctlFile string, kernelConfig []byte) (
+func (env *env) BuildKernel(compilerBin, linkerBin, ccacheBin, userspaceDir, cmdlineFile, sysctlFile string,
+ kernelConfig []byte) (
string, build.ImageDetails, error) {
imageDir := filepath.Join(env.cfg.Workdir, "image")
params := build.Params{
@@ -124,6 +125,7 @@ func (env *env) BuildKernel(compilerBin, ccacheBin, userspaceDir, cmdlineFile, s
KernelDir: env.cfg.KernelSrc,
OutputDir: imageDir,
Compiler: compilerBin,
+ Linker: linkerBin,
Ccache: ccacheBin,
UserspaceDir: userspaceDir,
CmdlineFile: cmdlineFile,
diff --git a/syz-ci/jobs.go b/syz-ci/jobs.go
index 588c3df2b..8a157ed75 100644
--- a/syz-ci/jobs.go
+++ b/syz-ci/jobs.go
@@ -417,6 +417,7 @@ func (jp *JobProcessor) bisect(job *Job, mgrcfg *mgrconfig.Config) error {
DefaultCompiler: mgr.mgrcfg.Compiler,
CompilerType: mgr.mgrcfg.CompilerType,
BinDir: jp.cfg.BisectBinDir,
+ Linker: mgr.mgrcfg.Linker,
Ccache: jp.cfg.Ccache,
Kernel: bisect.KernelConfig{
Repo: mgr.mgrcfg.Repo,
@@ -552,8 +553,8 @@ func (jp *JobProcessor) testPatch(job *Job, mgrcfg *mgrconfig.Config) error {
[]byte("# CONFIG_DEBUG_INFO_BTF is not set"), -1)
log.Logf(0, "job: building kernel...")
- kernelConfig, details, err := env.BuildKernel(mgr.mgrcfg.Compiler, mgr.mgrcfg.Ccache, mgr.mgrcfg.Userspace,
- mgr.mgrcfg.KernelCmdline, mgr.mgrcfg.KernelSysctl, req.KernelConfig)
+ kernelConfig, details, err := env.BuildKernel(mgr.mgrcfg.Compiler, mgr.mgrcfg.Linker, mgr.mgrcfg.Ccache,
+ mgr.mgrcfg.Userspace, mgr.mgrcfg.KernelCmdline, mgr.mgrcfg.KernelSysctl, req.KernelConfig)
resp.Build.CompilerID = details.CompilerID
if err != nil {
return err
diff --git a/tools/syz-testbuild/testbuild.go b/tools/syz-testbuild/testbuild.go
index 6b68b44fc..29c24e010 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 := "gcc", "gcc"
+ compiler, compilerType, linker, ccache := "gcc", "gcc", "ld", ""
bisectEnv, err := bisecter.EnvForCommit(compiler, compilerType, *flagBisectBin, com.Hash, kernelConfig)
if err != nil {
tool.Fail(err)
@@ -134,7 +134,7 @@ func test(repo vcs.Repo, bisecter vcs.Bisecter, kernelConfig []byte, env instanc
if err := build.Clean(*flagOS, *flagArch, vmType, *flagKernelSrc); err != nil {
tool.Fail(err)
}
- _, _, err = env.BuildKernel(bisectEnv.Compiler, "", *flagUserspace,
+ _, _, err = env.BuildKernel(bisectEnv.Compiler, linker, ccache, *flagUserspace,
*flagKernelCmdline, *flagKernelSysctl, bisectEnv.KernelConfig)
if err != nil {
if verr, ok := err.(*osutil.VerboseError); ok {