aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-06-12 18:31:28 +0200
committerDmitry Vyukov <dvyukov@google.com>2018-06-12 18:31:28 +0200
commit6fb8a0255e277f72870fa7bcc242c8218505d83e (patch)
tree139765cfad3297db97f36c99f581a0eac889a024
parentb431b2cc4c68297f3267543f1bbd4a91cd42d1e0 (diff)
syz-manager: don't save repros sent to dashboard
These repros eat unbounded amount of disk space.
-rw-r--r--syz-manager/manager.go70
1 files changed, 39 insertions, 31 deletions
diff --git a/syz-manager/manager.go b/syz-manager/manager.go
index 0af9a24de..b83029abc 100644
--- a/syz-manager/manager.go
+++ b/syz-manager/manager.go
@@ -735,30 +735,18 @@ func (mgr *Manager) saveRepro(res *repro.Result, hub bool) {
if err := mgr.getReporter().Symbolize(rep); err != nil {
log.Logf(0, "failed to symbolize repro: %v", err)
}
- dir := filepath.Join(mgr.crashdir, hash.String([]byte(rep.Title)))
- osutil.MkdirAll(dir)
-
- if err := osutil.WriteFile(filepath.Join(dir, "description"), []byte(rep.Title+"\n")); err != nil {
- log.Logf(0, "failed to write crash: %v", err)
- }
opts := fmt.Sprintf("# %+v\n", res.Opts)
prog := res.Prog.Serialize()
- osutil.WriteFile(filepath.Join(dir, "repro.prog"), append([]byte(opts), prog...))
- if len(mgr.cfg.Tag) > 0 {
- osutil.WriteFile(filepath.Join(dir, "repro.tag"), []byte(mgr.cfg.Tag))
- }
- if len(rep.Output) > 0 {
- osutil.WriteFile(filepath.Join(dir, "repro.log"), rep.Output)
- }
- if len(rep.Report) > 0 {
- osutil.WriteFile(filepath.Join(dir, "repro.report"), rep.Report)
+
+ // Append this repro to repro list to send to hub if it didn't come from hub originally.
+ if !hub {
+ progForHub := []byte(fmt.Sprintf("# %+v\n# %v\n# %v\n%s",
+ res.Opts, res.Report.Title, mgr.cfg.Tag, prog))
+ mgr.mu.Lock()
+ mgr.newRepros = append(mgr.newRepros, progForHub)
+ mgr.mu.Unlock()
}
- osutil.WriteFile(filepath.Join(dir, "repro.stats.log"), res.Stats.Log)
- stats := fmt.Sprintf("Extracting prog: %s\nMinimizing prog: %s\nSimplifying prog options: %s\n"+
- "Extracting C: %s\nSimplifying C: %s\n",
- res.Stats.ExtractProgTime, res.Stats.MinimizeProgTime, res.Stats.SimplifyProgTime,
- res.Stats.ExtractCTime, res.Stats.SimplifyCTime)
- osutil.WriteFile(filepath.Join(dir, "repro.stats"), []byte(stats))
+
var cprogText []byte
if res.CRepro {
cprog, err := csource.Write(res.Prog, res.Opts)
@@ -767,22 +755,12 @@ func (mgr *Manager) saveRepro(res *repro.Result, hub bool) {
if err == nil {
cprog = formatted
}
- osutil.WriteFile(filepath.Join(dir, "repro.cprog"), cprog)
cprogText = cprog
} else {
log.Logf(0, "failed to write C source: %v", err)
}
}
- // Append this repro to repro list to send to hub if it didn't come from hub originally.
- if !hub {
- progForHub := []byte(fmt.Sprintf("# %+v\n# %v\n# %v\n%s",
- res.Opts, res.Report.Title, mgr.cfg.Tag, prog))
- mgr.mu.Lock()
- mgr.newRepros = append(mgr.newRepros, progForHub)
- mgr.mu.Unlock()
- }
-
if mgr.dash != nil {
// Note: we intentionally don't set Corrupted for reproducers:
// 1. This is reproducible so can be debugged even with corrupted report.
@@ -801,8 +779,38 @@ func (mgr *Manager) saveRepro(res *repro.Result, hub bool) {
}
if _, err := mgr.dash.ReportCrash(dc); err != nil {
log.Logf(0, "failed to report repro to dashboard: %v", err)
+ } else {
+ // Don't store the crash locally, if we've successfully
+ // uploaded it to the dashboard. These will just eat disk space.
+ return
}
}
+
+ dir := filepath.Join(mgr.crashdir, hash.String([]byte(rep.Title)))
+ osutil.MkdirAll(dir)
+
+ if err := osutil.WriteFile(filepath.Join(dir, "description"), []byte(rep.Title+"\n")); err != nil {
+ log.Logf(0, "failed to write crash: %v", err)
+ }
+ osutil.WriteFile(filepath.Join(dir, "repro.prog"), append([]byte(opts), prog...))
+ if len(mgr.cfg.Tag) > 0 {
+ osutil.WriteFile(filepath.Join(dir, "repro.tag"), []byte(mgr.cfg.Tag))
+ }
+ if len(rep.Output) > 0 {
+ osutil.WriteFile(filepath.Join(dir, "repro.log"), rep.Output)
+ }
+ if len(rep.Report) > 0 {
+ osutil.WriteFile(filepath.Join(dir, "repro.report"), rep.Report)
+ }
+ if len(cprogText) > 0 {
+ osutil.WriteFile(filepath.Join(dir, "repro.cprog"), cprogText)
+ }
+ osutil.WriteFile(filepath.Join(dir, "repro.stats.log"), res.Stats.Log)
+ stats := fmt.Sprintf("Extracting prog: %s\nMinimizing prog: %s\nSimplifying prog options: %s\n"+
+ "Extracting C: %s\nSimplifying C: %s\n",
+ res.Stats.ExtractProgTime, res.Stats.MinimizeProgTime, res.Stats.SimplifyProgTime,
+ res.Stats.ExtractCTime, res.Stats.SimplifyCTime)
+ osutil.WriteFile(filepath.Join(dir, "repro.stats"), []byte(stats))
}
func (mgr *Manager) getReporter() report.Reporter {