From b247b6b84a9681b3bb8bddd3a31d81d3424cc0a3 Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Wed, 24 May 2023 15:01:43 +0200 Subject: pkg/report: don't record error for empty repro log case It's not entirely normal, but it can still happen and it's not a big problem by itself. Let's not pollute our error logs. --- pkg/repro/repro.go | 5 ++++- syz-manager/manager.go | 13 ++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/pkg/repro/repro.go b/pkg/repro/repro.go index d614cdfb6..2887bcebd 100644 --- a/pkg/repro/repro.go +++ b/pkg/repro/repro.go @@ -5,6 +5,7 @@ package repro import ( "bytes" + "errors" "fmt" "sort" "sync" @@ -59,6 +60,8 @@ type context struct { timeouts targets.Timeouts } +var ErrNoPrograms = errors.New("crash log does not contain any programs") + func Run(crashLog []byte, cfg *mgrconfig.Config, features *host.Features, reporter *report.Reporter, vmPool *vm.Pool, vmIndexes []int) (*Result, *Stats, error) { if len(vmIndexes) == 0 { @@ -66,7 +69,7 @@ func Run(crashLog []byte, cfg *mgrconfig.Config, features *host.Features, report } entries := cfg.Target.ParseLog(crashLog) if len(entries) == 0 { - return nil, nil, fmt.Errorf("crash log does not contain any programs") + return nil, nil, ErrNoPrograms } crashStart := len(crashLog) crashTitle, crashType := "", report.Unknown diff --git a/syz-manager/manager.go b/syz-manager/manager.go index b3a266bfa..7c37dd0ac 100644 --- a/syz-manager/manager.go +++ b/syz-manager/manager.go @@ -437,7 +437,7 @@ func (mgr *Manager) vmLoop() { log.Logf(1, "loop: repro on %+v finished '%v', repro=%v crepro=%v desc='%v'", res.instances, res.report0.Title, res.repro != nil, crepro, title) if res.err != nil { - log.Errorf("repro failed: %v", res.err) + reportReproError(res.err) } delete(reproducing, res.report0.Title) if res.repro == nil { @@ -468,6 +468,17 @@ func (mgr *Manager) vmLoop() { } } +func reportReproError(err error) { + switch err { + case repro.ErrNoPrograms: + // This is not extraordinary as programs are collected via SSH. + log.Logf(0, "repro failed: %v", err) + default: + // Report everything else as errors. + log.Errorf("repro failed: %v", err) + } +} + func (mgr *Manager) runRepro(crash *Crash, vmIndexes []int, putInstances func(...int)) *ReproResult { features := mgr.checkResult.Features res, stats, err := repro.Run(crash.Output, mgr.cfg, features, mgr.reporter, mgr.vmPool, vmIndexes) -- cgit mrf-deployment