aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-06-12 14:05:02 +0200
committerDmitry Vyukov <dvyukov@google.com>2018-06-12 14:53:22 +0200
commit06ece2ca663d0565d9e4cd932c4c2d86767a5396 (patch)
tree0ba1566273ece79a1570afc79a030cd78df8e3ef /tools
parent62d1af2467768d46623d446efaaf2f2cb6e8350e (diff)
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
Diffstat (limited to 'tools')
-rw-r--r--tools/syz-crush/crush.go2
-rw-r--r--tools/syz-execprog/execprog.go15
-rw-r--r--tools/syz-stress/stress.go11
3 files changed, 24 insertions, 4 deletions
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