From fc3c67f0292ef665a4d6b68d2cb3a25a793a061f Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Wed, 28 Oct 2020 17:37:53 +0100 Subject: syz-manager: don't fail on the first machine check error Machine check may be a bit flaky in some contexts (e.g. due to a random timeout flake). Don't fail everything on the first machine check error. Give it 10 tries. --- syz-manager/manager.go | 3 --- syz-manager/rpc.go | 25 +++++++++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/syz-manager/manager.go b/syz-manager/manager.go index bac2a773a..3942e12d5 100644 --- a/syz-manager/manager.go +++ b/syz-manager/manager.go @@ -1080,9 +1080,6 @@ func (mgr *Manager) machineChecked(a *rpctype.CheckArgs, enabledSyscalls map[*pr } } } - if a.Error != "" { - log.Fatalf("machine check: %v", a.Error) - } log.Logf(0, "machine check:") log.Logf(0, "%-24v: %v/%v", "syscalls", len(enabledSyscalls), len(mgr.target.Syscalls)) for _, feat := range a.Features.Supported() { diff --git a/syz-manager/rpc.go b/syz-manager/rpc.go index 3cd3d2d08..add55f031 100644 --- a/syz-manager/rpc.go +++ b/syz-manager/rpc.go @@ -27,14 +27,15 @@ type RPCServer struct { sandbox string batchSize int - mu sync.Mutex - fuzzers map[string]*Fuzzer - checkResult *rpctype.CheckArgs - maxSignal signal.Signal - corpusSignal signal.Signal - corpusCover cover.Cover - rotator *prog.Rotator - rnd *rand.Rand + mu sync.Mutex + fuzzers map[string]*Fuzzer + checkResult *rpctype.CheckArgs + maxSignal signal.Signal + corpusSignal signal.Signal + corpusCover cover.Cover + rotator *prog.Rotator + rnd *rand.Rand + checkFailures int } type Fuzzer struct { @@ -198,6 +199,14 @@ func (serv *RPCServer) Check(a *rpctype.CheckArgs, r *int) error { if serv.checkResult != nil { return nil } + if a.Error != "" { + log.Logf(0, "machine check failed: %v", a.Error) + serv.checkFailures++ + if serv.checkFailures == 10 { + log.Fatalf("machine check failing") + } + return fmt.Errorf("you failed") + } serv.targetEnabledSyscalls = make(map[*prog.Syscall]bool) for _, call := range a.EnabledCalls[serv.sandbox] { serv.targetEnabledSyscalls[serv.target.Syscalls[call]] = true -- cgit mrf-deployment