diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2021-05-17 08:45:56 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2021-05-17 10:25:41 +0200 |
| commit | a2eb125d4d18e3e21b7dea6e857d2ffa288218e0 (patch) | |
| tree | 636e4b5050b9445608ed60957e67a734f7835d7b | |
| parent | f54a5c0916af7d798b204eb70c484f154d69e0a3 (diff) | |
syz-manager: explicitly mark rotated fuzzers
Currently we use "f.rotatedSignal != nil" condition to denote rotated fuzzers.
However, it's possible that f.rotatedSignal is nil for a rotated fuzzer
if we select no signal at all during rotation somehow.
Use an explicit f.rotated flag instead.
| -rw-r--r-- | syz-manager/rpc.go | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/syz-manager/rpc.go b/syz-manager/rpc.go index ca4edbbb8..d091bd01a 100644 --- a/syz-manager/rpc.go +++ b/syz-manager/rpc.go @@ -42,6 +42,7 @@ type RPCServer struct { type Fuzzer struct { name string + rotated bool inputs []rpctype.RPCInput newMaxSignal signal.Signal rotatedSignal signal.Signal @@ -166,6 +167,7 @@ func (serv *RPCServer) rotateCorpus(f *Fuzzer, corpus []rpctype.RPCInput) *rpcty // Remove the corresponding signal from rotatedSignal which will // be used to accept new inputs from this manager. f.rotatedSignal = serv.corpusSignal.Intersection(f.newMaxSignal) + f.rotated = true result := *serv.checkResult result.EnabledCalls = map[string][]int{serv.cfg.Sandbox: callIDs} @@ -261,7 +263,7 @@ func (serv *RPCServer) NewInput(a *rpctype.NewInputArgs, r *int) error { // but this request is already in-flight. genuine := !serv.corpusSignal.Diff(inputSignal).Empty() rotated := false - if !genuine && f != nil && f.rotatedSignal != nil { + if !genuine && f != nil && f.rotated { rotated = !f.rotatedSignal.Diff(inputSignal).Empty() } if !genuine && !rotated { @@ -271,7 +273,7 @@ func (serv *RPCServer) NewInput(a *rpctype.NewInputArgs, r *int) error { return nil } - if f != nil && f.rotatedSignal != nil { + if f != nil && f.rotated { f.rotatedSignal.Merge(inputSignal) } diff := serv.corpusCover.MergeDiff(a.Cover) @@ -301,7 +303,7 @@ func (serv *RPCServer) NewInput(a *rpctype.NewInputArgs, r *int) error { a.RPCInput.Cover = nil // Don't send coverage back to all fuzzers. for _, other := range serv.fuzzers { - if other == f || other.rotatedSignal != nil { + if other == f || other.rotated { continue } other.inputs = append(other.inputs, a.RPCInput) @@ -328,13 +330,13 @@ func (serv *RPCServer) Poll(a *rpctype.PollArgs, r *rpctype.PollRes) error { serv.maxSignal.Merge(newMaxSignal) serv.stats.maxSignal.set(len(serv.maxSignal)) for _, f1 := range serv.fuzzers { - if f1 == f || f1.rotatedSignal != nil { + if f1 == f || f1.rotated { continue } f1.newMaxSignal.Merge(newMaxSignal) } } - if f.rotatedSignal != nil { + if f.rotated { // Let rotated VMs run in isolation, don't send them anything. return nil } |
