diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-06-15 18:28:49 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-06-15 18:29:47 +0200 |
| commit | 4c571f841345b0b720b330809c69b18d975b2332 (patch) | |
| tree | db00e112fa9fffde3b4c3c7f7b2652dea2ebfb0c /pkg/kernel/kernel.go | |
| parent | 429ff326c30b442d8c609ed7ddd0fbb5ba174a36 (diff) | |
pkg/kernel: add an option to provide full config for build
Normally config is applied on top of defconfig+kvmconfig.
This allows to provide full config that is used unmodified.
Diffstat (limited to 'pkg/kernel/kernel.go')
| -rw-r--r-- | pkg/kernel/kernel.go | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/pkg/kernel/kernel.go b/pkg/kernel/kernel.go index d19d9c5e6..9e9b4b32d 100644 --- a/pkg/kernel/kernel.go +++ b/pkg/kernel/kernel.go @@ -24,27 +24,35 @@ import ( "github.com/google/syzkaller/pkg/osutil" ) -func Build(dir, compiler, config string) error { +func Build(dir, compiler, config string, fullConfig bool) error { const timeout = 10 * time.Minute // default timeout for command invocations - os.Remove(filepath.Join(dir, ".config")) - configFile := filepath.Join(dir, "syz.config") - if err := ioutil.WriteFile(configFile, []byte(config), 0600); err != nil { - return fmt.Errorf("failed to write config file: %v", err) - } - if _, err := osutil.RunCmd(timeout, dir, "make", "defconfig"); err != nil { - return err - } - if _, err := osutil.RunCmd(timeout, dir, "make", "kvmconfig"); err != nil { - return err - } - if _, err := osutil.RunCmd(timeout, dir, "scripts/kconfig/merge_config.sh", "-n", ".config", configFile); err != nil { - return err + if fullConfig { + if err := ioutil.WriteFile(filepath.Join(dir, ".config"), []byte(config), 0600); err != nil { + return fmt.Errorf("failed to write config file: %v", err) + } + } else { + os.Remove(filepath.Join(dir, ".config")) + configFile := filepath.Join(dir, "syz.config") + if err := ioutil.WriteFile(configFile, []byte(config), 0600); err != nil { + return fmt.Errorf("failed to write config file: %v", err) + } + defer os.Remove(configFile) + if _, err := osutil.RunCmd(timeout, dir, "make", "defconfig"); err != nil { + return err + } + if _, err := osutil.RunCmd(timeout, dir, "make", "kvmconfig"); err != nil { + return err + } + if _, err := osutil.RunCmd(timeout, dir, "scripts/kconfig/merge_config.sh", "-n", ".config", configFile); err != nil { + return err + } } if _, err := osutil.RunCmd(timeout, dir, "make", "olddefconfig"); err != nil { return err } + // We build only bzImage as we currently don't use modules. // Build of a large kernel can take a while on a 1 CPU VM. - if _, err := osutil.RunCmd(3*time.Hour, dir, "make", "-j", strconv.Itoa(runtime.NumCPU()*2), "CC="+compiler); err != nil { + if _, err := osutil.RunCmd(3*time.Hour, dir, "make", "bzImage", "-j", strconv.Itoa(runtime.NumCPU()*2), "CC="+compiler); err != nil { return err } return nil |
