aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/kernel
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2017-06-15 18:28:49 +0200
committerDmitry Vyukov <dvyukov@google.com>2017-06-15 18:29:47 +0200
commit4c571f841345b0b720b330809c69b18d975b2332 (patch)
treedb00e112fa9fffde3b4c3c7f7b2652dea2ebfb0c /pkg/kernel
parent429ff326c30b442d8c609ed7ddd0fbb5ba174a36 (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')
-rw-r--r--pkg/kernel/generated.go2
-rw-r--r--pkg/kernel/kernel.go38
2 files changed, 24 insertions, 16 deletions
diff --git a/pkg/kernel/generated.go b/pkg/kernel/generated.go
index 08d08e474..0e6ba5b89 100644
--- a/pkg/kernel/generated.go
+++ b/pkg/kernel/generated.go
@@ -68,7 +68,7 @@ menuentry 'linux' --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,1)'
- linux /vmlinuz root=/dev/sda1 console=ttyS0 earlyprintk=serial vsyscall=native rodata=n ftrace_dump_on_oops=orig_cpu oops=panic panic_on_warn=1 panic=86400 kvm-intel.nested=1 kvm-intel.unrestricted_guest=1 kvm-intel.vmm_exclusive=1 kvm-intel.fasteoi=1 kvm-intel.ept=1 kvm-intel.flexpriority=1 kvm-intel.vpid=1 kvm-intel.emulate_invalid_guest_state=1 kvm-intel.eptad=1 kvm-intel.enable_shadow_vmcs=1 kvm-intel.pml=1 kvm-intel.enable_apicv=1
+ linux /vmlinuz root=/dev/sda1 console=ttyS0 earlyprintk=serial vsyscall=native rodata=n ftrace_dump_on_oops=orig_cpu oops=panic panic_on_warn=1 nmi_watchdog=panic panic=86400 kvm-intel.nested=1 kvm-intel.unrestricted_guest=1 kvm-intel.vmm_exclusive=1 kvm-intel.fasteoi=1 kvm-intel.ept=1 kvm-intel.flexpriority=1 kvm-intel.vpid=1 kvm-intel.emulate_invalid_guest_state=1 kvm-intel.eptad=1 kvm-intel.enable_shadow_vmcs=1 kvm-intel.pml=1 kvm-intel.enable_apicv=1
}
EOF
sudo grub-install --boot-directory=disk.mnt/boot --no-floppy /dev/nbd0
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