From 06ece2ca663d0565d9e4cd932c4c2d86767a5396 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Tue, 12 Jun 2018 14:05:02 +0200 Subject: pkg/host: rework host feature detection/setup Currently host feature detection/setup code is spread across platform-independent fuzzer code, pkg/host, pkg/ipc and executor. Move this all into pkg/host and show readable info about features on manager start. Fixes #46 --- tools/syz-crush/crush.go | 2 +- tools/syz-execprog/execprog.go | 15 ++++++++++++--- tools/syz-stress/stress.go | 11 +++++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) (limited to 'tools') diff --git a/tools/syz-crush/crush.go b/tools/syz-crush/crush.go index 531b43888..90a7b6185 100644 --- a/tools/syz-crush/crush.go +++ b/tools/syz-crush/crush.go @@ -101,7 +101,7 @@ func runInstance(cfg *mgrconfig.Config, reporter report.Reporter, vmPool *vm.Poo return } - cmd := fmt.Sprintf("%v -executor=%v -repeat=0 -procs=%v -cover=0 -sandbox=%v %v", + cmd := fmt.Sprintf("%v -executor=%v -repeat=0 -procs=%v -sandbox=%v %v", execprogBin, executorBin, cfg.Procs, cfg.Sandbox, logFile) outc, errc, err := inst.Run(time.Hour, nil, cmd) if err != nil { diff --git a/tools/syz-execprog/execprog.go b/tools/syz-execprog/execprog.go index 40aa521ce..8fc0a4aa1 100644 --- a/tools/syz-execprog/execprog.go +++ b/tools/syz-execprog/execprog.go @@ -16,6 +16,7 @@ import ( "time" "github.com/google/syzkaller/pkg/cover" + "github.com/google/syzkaller/pkg/host" "github.com/google/syzkaller/pkg/ipc" "github.com/google/syzkaller/pkg/log" "github.com/google/syzkaller/pkg/osutil" @@ -53,7 +54,15 @@ func main() { return } - config, execOpts := createConfig(entries) + features, err := host.Check() + if err != nil { + log.Fatalf("%v", err) + } + if _, err = host.Setup(features); err != nil { + log.Fatalf("%v", err) + } + + config, execOpts := createConfig(entries, features) var wg sync.WaitGroup wg.Add(*flagProcs) @@ -195,7 +204,7 @@ func loadPrograms(target *prog.Target, files []string) []*prog.LogEntry { return entries } -func createConfig(entries []*prog.LogEntry) (*ipc.Config, *ipc.ExecOpts) { +func createConfig(entries []*prog.LogEntry, features *host.Features) (*ipc.Config, *ipc.ExecOpts) { config, execOpts, err := ipc.DefaultConfig() if err != nil { log.Fatalf("%v", err) @@ -226,7 +235,7 @@ func createConfig(entries []*prog.LogEntry) (*ipc.Config, *ipc.ExecOpts) { handled[call.Meta.CallName] = true } } - if handled["syz_emit_ethernet"] || handled["syz_extract_tcp_res"] { + if features[host.FeatureNetworkInjection].Enabled { config.Flags |= ipc.FlagEnableTun } return config, execOpts diff --git a/tools/syz-stress/stress.go b/tools/syz-stress/stress.go index 504e5b58b..29ab24046 100644 --- a/tools/syz-stress/stress.go +++ b/tools/syz-stress/stress.go @@ -48,6 +48,14 @@ func main() { log.Fatalf("nothing to mutate (-generate=false and no corpus)") } + features, err := host.Check() + if err != nil { + log.Fatalf("%v", err) + } + if _, err = host.Setup(features); err != nil { + log.Fatalf("%v", err) + } + calls := buildCallList(target) prios := target.CalculatePriorities(corpus) ct := target.BuildChoiceTable(prios, calls) @@ -56,6 +64,9 @@ func main() { if err != nil { log.Fatalf("%v", err) } + if features[host.FeatureNetworkInjection].Enabled { + config.Flags |= ipc.FlagEnableTun + } gate = ipc.NewGate(2**flagProcs, nil) for pid := 0; pid < *flagProcs; pid++ { pid := pid -- cgit mrf-deployment