aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pkg/osutil/osutil.go9
-rw-r--r--syz-manager/manager.go20
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