From 39449875b60fb5a6e5ab53a1b2231ab6b29506a7 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Sat, 11 May 2019 12:57:07 +0200 Subject: syz-ci: don't assume kernel config is called .config .config is linux-ism. We have a convention that kernel config is copied to kernel.config file. Use it. --- pkg/bisect/bisect.go | 2 +- pkg/instance/instance.go | 13 ++++++++++--- syz-ci/jobs.go | 13 ++++++++----- tools/syz-testbuild/testbuild.go | 2 +- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/pkg/bisect/bisect.go b/pkg/bisect/bisect.go index d3ff05da4..78cb58bd4 100644 --- a/pkg/bisect/bisect.go +++ b/pkg/bisect/bisect.go @@ -261,7 +261,7 @@ func (env *env) test() (vcs.BisectResult, *vcs.Commit, *report.Report, error) { cfg.Manager.Type, cfg.Manager.KernelSrc); err != nil { return 0, nil, nil, fmt.Errorf("kernel clean failed: %v", err) } - err = env.inst.BuildKernel(compiler, cfg.Kernel.Userspace, + _, err = env.inst.BuildKernel(compiler, cfg.Kernel.Userspace, cfg.Kernel.Cmdline, cfg.Kernel.Sysctl, bisectEnv.KernelConfig) env.buildTime += time.Since(buildStart) if err != nil { diff --git a/pkg/instance/instance.go b/pkg/instance/instance.go index 30d0cbe4b..a84e9c89c 100644 --- a/pkg/instance/instance.go +++ b/pkg/instance/instance.go @@ -82,15 +82,22 @@ func (env *Env) BuildSyzkaller(repo, commit string) error { return nil } -func (env *Env) BuildKernel(compilerBin, userspaceDir, cmdlineFile, sysctlFile string, kernelConfig []byte) error { +func (env *Env) BuildKernel(compilerBin, userspaceDir, cmdlineFile, sysctlFile string, kernelConfig []byte) (string, error) { cfg := env.cfg imageDir := filepath.Join(cfg.Workdir, "image") if err := build.Image(cfg.TargetOS, cfg.TargetVMArch, cfg.Type, cfg.KernelSrc, imageDir, compilerBin, userspaceDir, cmdlineFile, sysctlFile, kernelConfig); err != nil { - return err + return "", err + } + if err := SetConfigImage(cfg, imageDir, true); err != nil { + return "", err + } + kernelConfigFile := filepath.Join(imageDir, "kernel.config") + if !osutil.IsExist(kernelConfigFile) { + kernelConfigFile = "" } - return SetConfigImage(cfg, imageDir, true) + return kernelConfigFile, nil } func SetConfigImage(cfg *mgrconfig.Config, imageDir string, reliable bool) error { diff --git a/syz-ci/jobs.go b/syz-ci/jobs.go index 3f1bc149b..7e755f8a2 100644 --- a/syz-ci/jobs.go +++ b/syz-ci/jobs.go @@ -469,13 +469,16 @@ func (jp *JobProcessor) testPatch(job *Job, mgrcfg *mgrconfig.Config) error { } log.Logf(0, "job: building kernel...") - if err := env.BuildKernel(mgr.mgrcfg.Compiler, mgr.mgrcfg.Userspace, mgr.mgrcfg.KernelCmdline, - mgr.mgrcfg.KernelSysctl, req.KernelConfig); err != nil { + kernelConfig, err := env.BuildKernel(mgr.mgrcfg.Compiler, mgr.mgrcfg.Userspace, mgr.mgrcfg.KernelCmdline, + mgr.mgrcfg.KernelSysctl, req.KernelConfig) + if err != nil { return err } - resp.Build.KernelConfig, err = ioutil.ReadFile(filepath.Join(mgrcfg.KernelSrc, ".config")) - if err != nil { - return fmt.Errorf("failed to read config file: %v", err) + if kernelConfig != "" { + resp.Build.KernelConfig, err = ioutil.ReadFile(kernelConfig) + if err != nil { + return fmt.Errorf("failed to read config file: %v", err) + } } log.Logf(0, "job: testing...") results, err := env.Test(3, req.ReproSyz, req.ReproOpts, req.ReproC) diff --git a/tools/syz-testbuild/testbuild.go b/tools/syz-testbuild/testbuild.go index bc7a3d4e6..81a3466e4 100644 --- a/tools/syz-testbuild/testbuild.go +++ b/tools/syz-testbuild/testbuild.go @@ -130,7 +130,7 @@ func test(repo vcs.Repo, bisecter vcs.Bisecter, kernelConfig []byte, env *instan if err := build.Clean(*flagOS, *flagArch, vmType, *flagKernelSrc); err != nil { fail(err) } - err = env.BuildKernel(compiler, *flagUserspace, *flagKernelCmdline, *flagKernelSysctl, bisectEnv.KernelConfig) + _, err = env.BuildKernel(compiler, *flagUserspace, *flagKernelCmdline, *flagKernelSysctl, bisectEnv.KernelConfig) if err != nil { if verr, ok := err.(*osutil.VerboseError); ok { log.Printf("BUILD BROKEN: %v", verr.Title) -- cgit mrf-deployment