From 1729cf6917b3e2fe4a22101a05e833f717bca8ce Mon Sep 17 00:00:00 2001 From: Mara Mihali Date: Tue, 6 Jul 2021 11:36:45 +0000 Subject: pkg/instance: added threaded and collide flags These can be used to disable threaded execution and collision mode for program's system calls. --- pkg/instance/instance.go | 6 ++++-- pkg/instance/instance_test.go | 12 +++++++++++- syz-runner/runner.go | 5 ++++- syz-verifier/main.go | 2 +- 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) -- cgit mrf-deployment