pkg/instance: relax syzkaller path check

Only check that syzkaller path is in GOPATH if we are going to build it.
syz-ci image testing does not have syzkaller path in GOPATH,
but it also does not build syzkaller.
This commit is contained in:
Dmitry Vyukov 2018-05-14 13:47:44 +02:00
parent 477728038c
commit d131f1b9fc

View File

@ -27,8 +27,7 @@ import (
) )
type Env struct { type Env struct {
cfg *mgrconfig.Config cfg *mgrconfig.Config
gopath string
} }
func NewEnv(cfg *mgrconfig.Config) (*Env, error) { func NewEnv(cfg *mgrconfig.Config) (*Env, error) {
@ -46,32 +45,32 @@ func NewEnv(cfg *mgrconfig.Config) (*Env, error) {
if cfg.Syzkaller == "" { if cfg.Syzkaller == "" {
return nil, fmt.Errorf("syzkaller path is empty") return nil, fmt.Errorf("syzkaller path is empty")
} }
srcIndex := strings.LastIndex(cfg.Syzkaller, "/src/")
if srcIndex == -1 {
return nil, fmt.Errorf("syzkaller path %q is not in GOPATH", cfg.Syzkaller)
}
if err := osutil.MkdirAll(cfg.Workdir); err != nil { if err := osutil.MkdirAll(cfg.Workdir); err != nil {
return nil, fmt.Errorf("failed to create tmp dir: %v", err) return nil, fmt.Errorf("failed to create tmp dir: %v", err)
} }
env := &Env{ env := &Env{
cfg: cfg, cfg: cfg,
gopath: cfg.Syzkaller[:srcIndex],
} }
return env, nil return env, nil
} }
func (env *Env) BuildSyzkaller(repo, commit string) error { func (env *Env) BuildSyzkaller(repo, commit string) error {
if _, err := git.CheckoutCommit(env.cfg.Syzkaller, repo, commit); err != nil { cfg := env.cfg
srcIndex := strings.LastIndex(cfg.Syzkaller, "/src/")
if srcIndex == -1 {
return fmt.Errorf("syzkaller path %q is not in GOPATH", cfg.Syzkaller)
}
if _, err := git.CheckoutCommit(cfg.Syzkaller, repo, commit); err != nil {
return fmt.Errorf("failed to checkout syzkaller repo: %v", err) return fmt.Errorf("failed to checkout syzkaller repo: %v", err)
} }
cmd := osutil.Command("make", "target") cmd := osutil.Command("make", "target")
cmd.Dir = env.cfg.Syzkaller cmd.Dir = cfg.Syzkaller
cmd.Env = append([]string{}, os.Environ()...) cmd.Env = append([]string{}, os.Environ()...)
cmd.Env = append(cmd.Env, cmd.Env = append(cmd.Env,
"GOPATH="+env.gopath, "GOPATH="+cfg.Syzkaller[:srcIndex],
"TARGETOS="+env.cfg.TargetOS, "TARGETOS="+cfg.TargetOS,
"TARGETVMARCH="+env.cfg.TargetVMArch, "TARGETVMARCH="+cfg.TargetVMArch,
"TARGETARCH="+env.cfg.TargetArch, "TARGETARCH="+cfg.TargetArch,
) )
if _, err := osutil.Run(time.Hour, cmd); err != nil { if _, err := osutil.Run(time.Hour, cmd); err != nil {
return fmt.Errorf("syzkaller build failed: %v", err) return fmt.Errorf("syzkaller build failed: %v", err)