diff options
| -rw-r--r-- | pkg/osutil/osutil.go | 9 | ||||
| -rw-r--r-- | syz-manager/manager.go | 20 |
2 files changed, 17 insertions, 12 deletions
diff --git a/pkg/osutil/osutil.go b/pkg/osutil/osutil.go index 3c98a7f68..f4a3cac18 100644 --- a/pkg/osutil/osutil.go +++ b/pkg/osutil/osutil.go @@ -7,6 +7,7 @@ import ( "bytes" "compress/gzip" "context" + "encoding/json" "errors" "fmt" "io" @@ -279,6 +280,14 @@ func WriteFile(filename string, data []byte) error { return os.WriteFile(filename, data, DefaultFilePerm) } +func WriteJSON[T any](filename string, obj T) error { + jsonData, err := json.MarshalIndent(obj, "", "\t") + if err != nil { + return fmt.Errorf("failed to marshal: %w", err) + } + return WriteFile(filename, jsonData) +} + func WriteGzipStream(filename string, reader io.Reader) error { f, err := os.Create(filename) if err != nil { diff --git a/syz-manager/manager.go b/syz-manager/manager.go index 40c1da6e5..1c86668f1 100644 --- a/syz-manager/manager.go +++ b/syz-manager/manager.go @@ -688,7 +688,10 @@ func (mgr *Manager) saveCrash(crash *manager.Crash) bool { log.Logf(0, "VM %v: crash: %v%v", crash.InstanceIndex, crash.Title, flags) if mgr.mode.FailOnCrashes { - mgr.saveJSON("report.json", crash.Report) + path := filepath.Join(mgr.cfg.Workdir, "report.json") + if err := osutil.WriteJSON(path, crash.Report); err != nil { + log.Fatal(err) + } log.Fatalf("kernel crashed in smoke testing mode, exiting") } @@ -742,16 +745,6 @@ func (mgr *Manager) saveCrash(crash *manager.Crash) bool { return mgr.NeedRepro(crash) } -func (mgr *Manager) saveJSON(filename string, object any) { - data, err := json.MarshalIndent(object, "", "\t") - if err != nil { - log.Fatalf("failed to serialize json data: %v", err) - } - if err := osutil.WriteFile(filepath.Join(mgr.cfg.Workdir, filename), data); err != nil { - log.Fatal(err) - } -} - func (mgr *Manager) needLocalRepro(crash *manager.Crash) bool { if !mgr.cfg.Reproduce || crash.Corrupted || crash.Suppressed { return false @@ -1197,7 +1190,10 @@ func (mgr *Manager) MachineChecked(features flatrpc.Feature, enabledSyscalls map if err != nil { log.Fatalf("interface probing failed: %v", err) } - mgr.saveJSON("interfaces.json", res) + path := filepath.Join(mgr.cfg.Workdir, "interfaces.json") + if err := osutil.WriteJSON(path, res); err != nil { + log.Fatal(err) + } mgr.exit("interface probe") }() return exec |
