From 477728038c7fcef8ed4a6ef6381a8ca60ec99e14 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Mon, 14 May 2018 12:16:35 +0200 Subject: syz-ci: fix manager config creation SyzFuzzerBin/SyzExecprogBin/SyzExecutorBin are ended up being empty. Fix this. --- syz-ci/manager.go | 10 ++++------ syz-manager/mgrconfig/mgrconfig.go | 33 ++++++++++++++++++--------------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/syz-ci/manager.go b/syz-ci/manager.go index dfc0f92af..df5970602 100644 --- a/syz-ci/manager.go +++ b/syz-ci/manager.go @@ -94,6 +94,7 @@ func createManager(cfg *Config, mgrcfg *ManagerConfig, stop chan struct{}) *Mana log.Fatalf("failed to load manager %v config: %v", mgrcfg.Name, err) } managercfg.Name = cfg.Name + "-" + mgrcfg.Name + managercfg.Syzkaller = filepath.FromSlash("syzkaller/current") mgr := &Manager{ name: managercfg.Name, @@ -438,7 +439,6 @@ func (mgr *Manager) createTestConfig(imageDir string, info *BuildInfo) (*mgrconf mgrcfg.Image = filepath.Join(imageDir, "image") mgrcfg.SSHKey = filepath.Join(imageDir, "key") mgrcfg.KernelSrc = mgr.kernelDir - mgrcfg.Syzkaller = filepath.FromSlash("syzkaller/current") if err := mgrconfig.Complete(mgrcfg); err != nil { return nil, fmt.Errorf("bad manager config: %v", err) } @@ -466,17 +466,15 @@ func (mgr *Manager) writeConfig(buildTag string) (string, error) { // update the source, or even delete and re-clone. If this causes // problems, we need to make a copy of sources after build. mgrcfg.KernelSrc = mgr.kernelDir - mgrcfg.Syzkaller = filepath.FromSlash("syzkaller/current") mgrcfg.Image = filepath.Join(mgr.currentDir, "image") mgrcfg.SSHKey = filepath.Join(mgr.currentDir, "key") - + if err := mgrconfig.Complete(mgrcfg); err != nil { + return "", fmt.Errorf("bad manager config: %v", err) + } configFile := filepath.Join(mgr.currentDir, "manager.cfg") if err := config.SaveFile(configFile, mgrcfg); err != nil { return "", err } - if _, err := mgrconfig.LoadFile(configFile); err != nil { - return "", err - } return configFile, nil } diff --git a/syz-manager/mgrconfig/mgrconfig.go b/syz-manager/mgrconfig/mgrconfig.go index bc8c5eafa..1b9eb4202 100644 --- a/syz-manager/mgrconfig/mgrconfig.go +++ b/syz-manager/mgrconfig/mgrconfig.go @@ -151,16 +151,6 @@ func loadPartial(cfg *Config) (*Config, error) { if err != nil { return nil, err } - targetBin := func(name, arch string) string { - exe := "" - if cfg.TargetOS == "windows" { - exe = ".exe" - } - return filepath.Join(cfg.Syzkaller, "bin", cfg.TargetOS+"_"+arch, name+exe) - } - cfg.SyzFuzzerBin = targetBin("syz-fuzzer", cfg.TargetVMArch) - cfg.SyzExecprogBin = targetBin("syz-execprog", cfg.TargetVMArch) - cfg.SyzExecutorBin = targetBin("syz-executor", cfg.TargetArch) return cfg, nil } @@ -171,6 +161,24 @@ func Complete(cfg *Config) error { if cfg.SSHUser == "" { return fmt.Errorf("bad config syzkaller param: ssh user is empty") } + if cfg.Workdir == "" { + return fmt.Errorf("config param workdir is empty") + } + cfg.Workdir = osutil.Abs(cfg.Workdir) + if cfg.Syzkaller == "" { + return fmt.Errorf("config param syzkaller is empty") + } + cfg.Syzkaller = osutil.Abs(cfg.Syzkaller) + targetBin := func(name, arch string) string { + exe := "" + if cfg.TargetOS == "windows" { + exe = ".exe" + } + return filepath.Join(cfg.Syzkaller, "bin", cfg.TargetOS+"_"+arch, name+exe) + } + cfg.SyzFuzzerBin = targetBin("syz-fuzzer", cfg.TargetVMArch) + cfg.SyzExecprogBin = targetBin("syz-execprog", cfg.TargetVMArch) + cfg.SyzExecutorBin = targetBin("syz-executor", cfg.TargetArch) if !osutil.IsExist(cfg.SyzFuzzerBin) { return fmt.Errorf("bad config syzkaller param: can't find %v", cfg.SyzFuzzerBin) } @@ -183,9 +191,6 @@ func Complete(cfg *Config) error { if cfg.HTTP == "" { return fmt.Errorf("config param http is empty") } - if cfg.Workdir == "" { - return fmt.Errorf("config param workdir is empty") - } if cfg.Type == "" { return fmt.Errorf("config param type is empty") } @@ -207,9 +212,7 @@ func Complete(cfg *Config) error { } } - cfg.Workdir = osutil.Abs(cfg.Workdir) cfg.Vmlinux = osutil.Abs(cfg.Vmlinux) - cfg.Syzkaller = osutil.Abs(cfg.Syzkaller) if cfg.KernelSrc == "" { cfg.KernelSrc = filepath.Dir(cfg.Vmlinux) // assume in-tree build by default } -- cgit mrf-deployment