Lines Matching refs:fuzzer
209 fuzzer := &Fuzzer{
223 for i := 0; fuzzer.poll(i == 0, nil); i++ {
229 prios := target.CalculatePriorities(fuzzer.corpus)
230 fuzzer.choiceTable = target.BuildChoiceTable(prios, calls)
233 proc, err := newProc(fuzzer, pid)
237 fuzzer.procs = append(fuzzer.procs, proc)
241 fuzzer.pollLoop()
244 func (fuzzer *Fuzzer) pollLoop() {
253 case <-fuzzer.needPoll:
256 if fuzzer.outputType != OutputStdout && time.Since(lastPrint) > 10*time.Second {
262 needCandidates := fuzzer.workQueue.wantCandidates()
267 for _, proc := range fuzzer.procs {
272 v := atomic.SwapUint64(&fuzzer.stats[stat], 0)
276 if !fuzzer.poll(needCandidates, stats) {
283 func (fuzzer *Fuzzer) poll(needCandidates bool, stats map[string]uint64) bool {
285 Name: fuzzer.name,
287 MaxSignal: fuzzer.grabNewSignal().Serialize(),
291 if err := fuzzer.manager.Call("Manager.Poll", a, r); err != nil {
297 fuzzer.addMaxSignal(maxSignal)
299 fuzzer.addInputFromAnotherFuzzer(inp)
302 p, err := fuzzer.target.Deserialize(candidate.Prog)
313 fuzzer.workQueue.enqueue(&WorkCandidate{
321 func (fuzzer *Fuzzer) sendInputToManager(inp rpctype.RPCInput) {
323 Name: fuzzer.name,
326 if err := fuzzer.manager.Call("Manager.NewInput", a, nil); err != nil {
331 func (fuzzer *Fuzzer) addInputFromAnotherFuzzer(inp rpctype.RPCInput) {
332 p, err := fuzzer.target.Deserialize(inp.Prog)
338 fuzzer.addInputToCorpus(p, sign, sig)
341 func (fuzzer *Fuzzer) addInputToCorpus(p *prog.Prog, sign signal.Signal, sig hash.Sig) {
342 fuzzer.corpusMu.Lock()
343 if _, ok := fuzzer.corpusHashes[sig]; !ok {
344 fuzzer.corpus = append(fuzzer.corpus, p)
345 fuzzer.corpusHashes[sig] = struct{}{}
347 fuzzer.corpusMu.Unlock()
350 fuzzer.signalMu.Lock()
351 fuzzer.corpusSignal.Merge(sign)
352 fuzzer.maxSignal.Merge(sign)
353 fuzzer.signalMu.Unlock()
357 func (fuzzer *Fuzzer) corpusSnapshot() []*prog.Prog {
358 fuzzer.corpusMu.RLock()
359 defer fuzzer.corpusMu.RUnlock()
360 return fuzzer.corpus
363 func (fuzzer *Fuzzer) addMaxSignal(sign signal.Signal) {
367 fuzzer.signalMu.Lock()
368 defer fuzzer.signalMu.Unlock()
369 fuzzer.maxSignal.Merge(sign)
372 func (fuzzer *Fuzzer) grabNewSignal() signal.Signal {
373 fuzzer.signalMu.Lock()
374 defer fuzzer.signalMu.Unlock()
375 sign := fuzzer.newSignal
379 fuzzer.newSignal = nil
383 func (fuzzer *Fuzzer) corpusSignalDiff(sign signal.Signal) signal.Signal {
384 fuzzer.signalMu.RLock()
385 defer fuzzer.signalMu.RUnlock()
386 return fuzzer.corpusSignal.Diff(sign)
389 func (fuzzer *Fuzzer) checkNewSignal(p *prog.Prog, info []ipc.CallInfo) (calls []int) {
390 fuzzer.signalMu.RLock()
391 defer fuzzer.signalMu.RUnlock()
393 diff := fuzzer.maxSignal.DiffRaw(inf.Signal, signalPrio(p.Target, p.Calls[i], &inf))
398 fuzzer.signalMu.RUnlock()
399 fuzzer.signalMu.Lock()
400 fuzzer.maxSignal.Merge(diff)
401 fuzzer.newSignal.Merge(diff)
402 fuzzer.signalMu.Unlock()
403 fuzzer.signalMu.RLock()