diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-06-12 18:31:28 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-06-12 18:31:28 +0200 |
| commit | 6fb8a0255e277f72870fa7bcc242c8218505d83e (patch) | |
| tree | 139765cfad3297db97f36c99f581a0eac889a024 | |
| parent | b431b2cc4c68297f3267543f1bbd4a91cd42d1e0 (diff) | |
syz-manager: don't save repros sent to dashboard
These repros eat unbounded amount of disk space.
| -rw-r--r-- | syz-manager/manager.go | 70 |
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 { |
