aboutsummaryrefslogtreecommitdiffstats
path: root/tools/syz-repro
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2017-10-17 18:08:39 +0200
committerDmitry Vyukov <dvyukov@google.com>2017-10-18 12:01:24 +0200
commit85c802e4cf59350d2c06c45d42d48271338665a1 (patch)
tree49649dd8e1bad8a9d2f1e64537c99d3cd5c6d316 /tools/syz-repro
parentb69d27d17e975e775afe07919e28bbe29e8d1f03 (diff)
pkg/report: support multiple OSes
Introduce report.Reporter interface. Add an implementation per-OS. Make users be explicit about OS they are testing.
Diffstat (limited to 'tools/syz-repro')
-rw-r--r--tools/syz-repro/repro.go37
1 files changed, 16 insertions, 21 deletions
diff --git a/tools/syz-repro/repro.go b/tools/syz-repro/repro.go
index 6d8316866..e51a4d459 100644
--- a/tools/syz-repro/repro.go
+++ b/tools/syz-repro/repro.go
@@ -8,11 +8,11 @@ import (
"fmt"
"io/ioutil"
"os"
- "os/signal"
- "syscall"
"github.com/google/syzkaller/pkg/csource"
- . "github.com/google/syzkaller/pkg/log"
+ "github.com/google/syzkaller/pkg/log"
+ "github.com/google/syzkaller/pkg/osutil"
+ "github.com/google/syzkaller/pkg/report"
"github.com/google/syzkaller/pkg/repro"
"github.com/google/syzkaller/prog"
"github.com/google/syzkaller/syz-manager/mgrconfig"
@@ -29,22 +29,22 @@ func main() {
flag.Parse()
cfg, err := mgrconfig.LoadFile(*flagConfig)
if err != nil {
- Fatalf("%v", err)
+ log.Fatalf("%v", err)
}
if len(flag.Args()) != 1 {
- Fatalf("usage: syz-repro -config=config.file execution.log")
+ log.Fatalf("usage: syz-repro -config=config.file execution.log")
}
data, err := ioutil.ReadFile(flag.Args()[0])
if err != nil {
- Fatalf("failed to open log file: %v", err)
+ log.Fatalf("failed to open log file: %v", err)
}
if _, err := prog.GetTarget(cfg.TargetOS, cfg.TargetArch); err != nil {
- Fatalf("%v", err)
+ log.Fatalf("%v", err)
}
env := mgrconfig.CreateVMEnv(cfg, false)
vmPool, err := vm.Create(cfg.Type, env)
if err != nil {
- Fatalf("%v", err)
+ log.Fatalf("%v", err)
}
vmCount := vmPool.Count()
if *flagCount > 0 && *flagCount < vmCount {
@@ -57,20 +57,15 @@ func main() {
for i := range vmIndexes {
vmIndexes[i] = i
}
+ reporter, err := report.NewReporter(cfg.TargetOS, cfg.Kernel_Src, "", nil, cfg.ParsedIgnores)
+ if err != nil {
+ log.Fatalf("%v", err)
+ }
+ osutil.HandleInterrupts(vm.Shutdown)
- go func() {
- c := make(chan os.Signal, 2)
- signal.Notify(c, syscall.SIGINT)
- <-c
- close(vm.Shutdown)
- Logf(-1, "shutting down...")
- <-c
- Fatalf("terminating")
- }()
-
- res, err := repro.Run(data, cfg, vmPool, vmIndexes)
+ res, err := repro.Run(data, cfg, reporter, vmPool, vmIndexes)
if err != nil {
- Logf(0, "reproduction failed: %v", err)
+ log.Logf(0, "reproduction failed: %v", err)
}
if res == nil {
return
@@ -81,7 +76,7 @@ func main() {
if res.CRepro {
src, err := csource.Write(res.Prog, res.Opts)
if err != nil {
- Fatalf("failed to generate C repro: %v", err)
+ log.Fatalf("failed to generate C repro: %v", err)
}
if formatted, err := csource.Format(src); err == nil {
src = formatted