diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-09-14 19:25:01 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-09-15 16:02:37 +0200 |
| commit | 52a33fd516102a98d3753bf69417235b655a68dc (patch) | |
| tree | 351ab73db934d3b4e4babbe27e8801c659f2631b /tools | |
| parent | 25f4fe0662f7f3b390d16b2e786f2ba0aa0293f1 (diff) | |
prog: remove default target and all global state
Now each prog function accepts the desired target explicitly.
No global, implicit state involved.
This is much cleaner and allows cross-OS/arch testing, etc.
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/syz-crush/crush.go | 2 | ||||
| -rw-r--r-- | tools/syz-execprog/execprog.go | 5 | ||||
| -rw-r--r-- | tools/syz-mutate/mutate.go | 9 | ||||
| -rw-r--r-- | tools/syz-prog2c/prog2c.go | 6 | ||||
| -rw-r--r-- | tools/syz-repro/repro.go | 2 | ||||
| -rw-r--r-- | tools/syz-stress/stress.go | 27 | ||||
| -rw-r--r-- | tools/syz-upgrade/upgrade.go | 7 |
7 files changed, 34 insertions, 24 deletions
diff --git a/tools/syz-crush/crush.go b/tools/syz-crush/crush.go index 059852200..6deeeffd8 100644 --- a/tools/syz-crush/crush.go +++ b/tools/syz-crush/crush.go @@ -37,7 +37,7 @@ func main() { if len(flag.Args()) != 1 { Fatalf("usage: syz-crush -config=config.file execution.log") } - if err := prog.SetDefaultTarget(cfg.TargetOS, cfg.TargetArch); err != nil { + if _, err := prog.GetTarget(cfg.TargetOS, cfg.TargetArch); err != nil { Fatalf("%v", err) } env := mgrconfig.CreateVMEnv(cfg, false) diff --git a/tools/syz-execprog/execprog.go b/tools/syz-execprog/execprog.go index 53fcbb8ca..282e416e3 100644 --- a/tools/syz-execprog/execprog.go +++ b/tools/syz-execprog/execprog.go @@ -47,7 +47,8 @@ func main() { os.Exit(1) } - if err := prog.SetDefaultTarget(runtime.GOOS, *flagArch); err != nil { + target, err := prog.GetTarget(runtime.GOOS, *flagArch) + if err != nil { Fatalf("%v", err) } @@ -57,7 +58,7 @@ func main() { if err != nil { Fatalf("failed to read log file: %v", err) } - entries := prog.ParseLog(data) + entries := target.ParseLog(data) for _, ent := range entries { progs = append(progs, ent.P) } diff --git a/tools/syz-mutate/mutate.go b/tools/syz-mutate/mutate.go index 1c15eabc5..242175ef8 100644 --- a/tools/syz-mutate/mutate.go +++ b/tools/syz-mutate/mutate.go @@ -27,7 +27,8 @@ func main() { fmt.Fprintf(os.Stderr, "usage: mutate program\n") os.Exit(1) } - if err := prog.SetDefaultTarget(runtime.GOOS, runtime.GOARCH); err != nil { + target, err := prog.GetTarget(runtime.GOOS, runtime.GOARCH) + if err != nil { fmt.Fprintf(os.Stderr, "%v", err) os.Exit(1) } @@ -36,14 +37,14 @@ func main() { fmt.Fprintf(os.Stderr, "failed to read prog file: %v\n", err) os.Exit(1) } - p, err := prog.Deserialize(data) + p, err := target.Deserialize(data) if err != nil { fmt.Fprintf(os.Stderr, "failed to deserialize the program: %v\n", err) os.Exit(1) } - prios := prog.CalculatePriorities(nil) - ct := prog.BuildChoiceTable(prios, nil) + prios := target.CalculatePriorities(nil) + ct := target.BuildChoiceTable(prios, nil) seed := time.Now().UnixNano() if *flagSeed != -1 { diff --git a/tools/syz-prog2c/prog2c.go b/tools/syz-prog2c/prog2c.go index bc6453875..f0ab63f36 100644 --- a/tools/syz-prog2c/prog2c.go +++ b/tools/syz-prog2c/prog2c.go @@ -15,6 +15,7 @@ import ( ) var ( + flagArch = flag.String("arch", runtime.GOARCH, "target arch") flagThreaded = flag.Bool("threaded", false, "create threaded program") flagCollide = flag.Bool("collide", false, "create collide program") flagRepeat = flag.Bool("repeat", false, "repeat program infinitely or not") @@ -36,7 +37,8 @@ func main() { flag.PrintDefaults() os.Exit(1) } - if err := prog.SetDefaultTarget(runtime.GOOS, runtime.GOARCH); err != nil { + target, err := prog.GetTarget(runtime.GOOS, *flagArch) + if err != nil { fmt.Fprintf(os.Stderr, "%v", err) os.Exit(1) } @@ -45,7 +47,7 @@ func main() { fmt.Fprintf(os.Stderr, "failed to read prog file: %v\n", err) os.Exit(1) } - p, err := prog.Deserialize(data) + p, err := target.Deserialize(data) if err != nil { fmt.Fprintf(os.Stderr, "failed to deserialize the program: %v\n", err) os.Exit(1) diff --git a/tools/syz-repro/repro.go b/tools/syz-repro/repro.go index 310ea54a9..6d8316866 100644 --- a/tools/syz-repro/repro.go +++ b/tools/syz-repro/repro.go @@ -38,7 +38,7 @@ func main() { if err != nil { Fatalf("failed to open log file: %v", err) } - if err := prog.SetDefaultTarget(cfg.TargetOS, cfg.TargetArch); err != nil { + if _, err := prog.GetTarget(cfg.TargetOS, cfg.TargetArch); err != nil { Fatalf("%v", err) } env := mgrconfig.CreateVMEnv(cfg, false) diff --git a/tools/syz-stress/stress.go b/tools/syz-stress/stress.go index 6e24f3915..77be42299 100644 --- a/tools/syz-stress/stress.go +++ b/tools/syz-stress/stress.go @@ -37,18 +37,19 @@ const programLength = 30 func main() { flag.Parse() - if err := prog.SetDefaultTarget(runtime.GOOS, runtime.GOARCH); err != nil { + target, err := prog.GetTarget(runtime.GOOS, runtime.GOARCH) + if err != nil { Fatalf("%v", err) } - corpus := readCorpus() + corpus := readCorpus(target) Logf(0, "parsed %v programs", len(corpus)) if !*flagGenerate && len(corpus) == 0 { Fatalf("nothing to mutate (-generate=false and no corpus)") } - calls := buildCallList() - prios := prog.CalculatePriorities(corpus) - ct := prog.BuildChoiceTable(prios, calls) + calls := buildCallList(target) + prios := target.CalculatePriorities(corpus) + ct := target.BuildChoiceTable(prios, calls) config, err := ipc.DefaultConfig() if err != nil { @@ -67,7 +68,7 @@ func main() { for i := 0; ; i++ { var p *prog.Prog if *flagGenerate && len(corpus) == 0 || i%4 != 0 { - p = prog.Generate(rs, programLength, ct) + p = target.Generate(rs, programLength, ct) execute(pid, env, p) p.Mutate(rs, programLength, ct, corpus) execute(pid, env, p) @@ -113,7 +114,7 @@ func execute(pid int, env *ipc.Env, p *prog.Prog) { } } -func readCorpus() []*prog.Prog { +func readCorpus(target *prog.Target) []*prog.Prog { if *flagCorpus == "" { return nil } @@ -123,7 +124,7 @@ func readCorpus() []*prog.Prog { } var progs []*prog.Prog for _, rec := range db.Records { - p, err := prog.Deserialize(rec.Val) + p, err := target.Deserialize(rec.Val) if err != nil { Fatalf("failed to deserialize corpus program: %v", err) } @@ -132,21 +133,21 @@ func readCorpus() []*prog.Prog { return progs } -func buildCallList() map[*prog.Syscall]bool { - calls, err := host.DetectSupportedSyscalls() +func buildCallList(target *prog.Target) map[*prog.Syscall]bool { + calls, err := host.DetectSupportedSyscalls(target) if err != nil { Logf(0, "failed to detect host supported syscalls: %v", err) calls = make(map[*prog.Syscall]bool) - for _, c := range prog.Syscalls { + for _, c := range target.Syscalls { calls[c] = true } } - for _, c := range prog.Syscalls { + for _, c := range target.Syscalls { if !calls[c] { Logf(0, "disabling unsupported syscall: %v", c.Name) } } - trans := prog.TransitivelyEnabledCalls(calls) + trans := target.TransitivelyEnabledCalls(calls) for c := range calls { if !trans[c] { Logf(0, "disabling transitively unsupported syscall: %v", c.Name) diff --git a/tools/syz-upgrade/upgrade.go b/tools/syz-upgrade/upgrade.go index 0a28a27fb..d833fdc21 100644 --- a/tools/syz-upgrade/upgrade.go +++ b/tools/syz-upgrade/upgrade.go @@ -15,6 +15,7 @@ import ( "io/ioutil" "os" "path/filepath" + "runtime" "github.com/google/syzkaller/pkg/osutil" "github.com/google/syzkaller/prog" @@ -29,13 +30,17 @@ func main() { if err != nil { fatalf("failed to read corpus dir: %v", err) } + target, err := prog.GetTarget(runtime.GOOS, runtime.GOARCH) + if err != nil { + fatalf("%v", err) + } for _, f := range files { fname := filepath.Join(os.Args[1], f.Name()) data, err := ioutil.ReadFile(fname) if err != nil { fatalf("failed to read program: %v", err) } - p, err := prog.Deserialize(data) + p, err := target.Deserialize(data) if err != nil { fatalf("failed to deserialize program: %v", err) } |
