aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2021-05-17 08:45:56 +0200
committerDmitry Vyukov <dvyukov@google.com>2021-05-17 10:25:41 +0200
commita2eb125d4d18e3e21b7dea6e857d2ffa288218e0 (patch)
tree636e4b5050b9445608ed60957e67a734f7835d7b
parentf54a5c0916af7d798b204eb70c484f154d69e0a3 (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.go12
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
}