aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMara Mihali <maramihali@google.com>2021-07-06 11:36:45 +0000
committerDmitry Vyukov <dvyukov@google.com>2021-07-06 15:47:33 +0200
commit1729cf6917b3e2fe4a22101a05e833f717bca8ce (patch)
tree2f2c835115a75eec528a9cd39e33e9e9396f486e
parent22ff12bdbb3509fbf00cd979af4629b50aaff7a3 (diff)
pkg/instance: added threaded and collide flags
These can be used to disable threaded execution and collision mode for program's system calls.
-rw-r--r--pkg/instance/instance.go6
-rw-r--r--pkg/instance/instance_test.go12
-rw-r--r--syz-runner/runner.go5
-rwxr-xr-xsyz-verifier/main.go2
4 files changed, 20 insertions, 5 deletions
diff --git a/pkg/instance/instance.go b/pkg/instance/instance.go
index 19c71c067..c65d97cce 100644
--- a/pkg/instance/instance.go
+++ b/pkg/instance/instance.go
@@ -500,6 +500,8 @@ var MakeBin = func() string {
return "make"
}()
-func RunnerCmd(prog, fwdAddr, os, arch string, poolIdx, vmIdx int) string {
- return fmt.Sprintf("%s -addr=%s -os=%s -arch=%s -pool=%v -vm=%v", prog, fwdAddr, os, arch, poolIdx, vmIdx)
+func RunnerCmd(prog, fwdAddr, os, arch string, poolIdx, vmIdx int, collide, threaded bool) string {
+ return fmt.Sprintf("%s -addr=%s -os=%s -arch=%s -pool=%d -vm=%d "+
+ "-collide=%t -threaded=%t", prog, fwdAddr, os, arch, poolIdx, vmIdx,
+ collide, threaded)
}
diff --git a/pkg/instance/instance_test.go b/pkg/instance/instance_test.go
index c5d8cd1d1..7d2ce3031 100644
--- a/pkg/instance/instance_test.go
+++ b/pkg/instance/instance_test.go
@@ -149,8 +149,10 @@ func TestRunnerCmd(t *testing.T) {
flagArch := flags.String("arch", "", "target architecture")
flagPool := flags.Int("pool", 0, "index of pool that started VM")
flagVM := flags.Int("vm", 0, "index of VM that started the Runner")
+ flagCollide := flags.Bool("collide", true, "collide syscalls to provoke data races")
+ flagThreaded := flags.Bool("threaded", true, "use threaded mode in executor")
- cmdLine := RunnerCmd(os.Args[0], "localhost:1234", targets.Linux, targets.AMD64, 0, 0)
+ cmdLine := RunnerCmd(os.Args[0], "localhost:1234", targets.Linux, targets.AMD64, 0, 0, false, false)
args := strings.Split(cmdLine, " ")[1:]
if err := flags.Parse(args); err != nil {
t.Fatalf("error parsing flags: %v, want: nil", err)
@@ -175,4 +177,12 @@ func TestRunnerCmd(t *testing.T) {
if got, want := *flagVM, 0; got != want {
t.Errorf("bad vm index: %d, want: %d", got, want)
}
+
+ if got, want := *flagCollide, false; got != want {
+ t.Errorf("bad collide: %t, want: %t", got, want)
+ }
+
+ if got, want := *flagThreaded, false; got != want {
+ t.Errorf("bad threaded: %t, want: %t", got, want)
+ }
}
diff --git a/syz-runner/runner.go b/syz-runner/runner.go
index 2faa8f2e0..de11ea21d 100644
--- a/syz-runner/runner.go
+++ b/syz-runner/runner.go
@@ -30,14 +30,17 @@ func main() {
flagOS := flag.String("os", runtime.GOOS, "target OS")
flagArch := flag.String("arch", runtime.GOARCH, "target arch")
flag.Parse()
+
target, err := prog.GetTarget(*flagOS, *flagArch)
if err != nil {
log.Fatalf("failed to configure target: %v", err)
}
+
config, opts, err := ipcconfig.Default(target)
if err != nil {
- log.Fatalf("%v", err)
+ log.Fatalf("failed to create default ipc config: %v", err)
}
+
timeouts := config.Timeouts
vrf, err := rpctype.NewRPCClient(*flagAddr, timeouts.Scale)
if err != nil {
diff --git a/syz-verifier/main.go b/syz-verifier/main.go
index 2c35e1224..65a7a5cdd 100755
--- a/syz-verifier/main.go
+++ b/syz-verifier/main.go
@@ -206,7 +206,7 @@ func main() {
log.Fatalf("failed to copy executor binary: %v", err)
}
- cmd := instance.RunnerCmd(runnerBin, fwdAddr, vrf.target.OS, vrf.target.Arch, idx, 0)
+ cmd := instance.RunnerCmd(runnerBin, fwdAddr, vrf.target.OS, vrf.target.Arch, idx, 0, false, false)
outc, errc, err := inst.Run(pi.cfg.Timeouts.VMRunningTime, vrf.vmStop, cmd)
if err != nil {
log.Fatalf("failed to start runner: %v", err)