diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2020-10-28 17:37:53 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2020-10-29 18:02:20 +0100 |
| commit | fc3c67f0292ef665a4d6b68d2cb3a25a793a061f (patch) | |
| tree | a5a2cfb4c05bbbcf848ee0a543fd6ebe7c8bb86f | |
| parent | f24824d3d54060a7d878eeb35c47f85dab84966a (diff) | |
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.
| -rw-r--r-- | syz-manager/manager.go | 3 | ||||
| -rw-r--r-- | 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 |
