aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/fuzzer/fuzzer.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-08-27 17:34:15 +0200
committerAleksandr Nogikh <nogikh@google.com>2024-08-28 07:56:58 +0000
commit5b53f368f2aa5b1e61ce954a6e546348ea1ae8e2 (patch)
treefe1df79049d8f90d017629d8d5b2c3431ba5df29 /pkg/fuzzer/fuzzer.go
parent9881ea45723f0f7bbc5876d48c32a7cca1fecaa3 (diff)
syz-manager: display job lists for triage and smash jobs
This will let us understand better what exactly the fuzzer was doing.
Diffstat (limited to 'pkg/fuzzer/fuzzer.go')
-rw-r--r--pkg/fuzzer/fuzzer.go37
1 files changed, 32 insertions, 5 deletions
diff --git a/pkg/fuzzer/fuzzer.go b/pkg/fuzzer/fuzzer.go
index afd131fc4..38a967251 100644
--- a/pkg/fuzzer/fuzzer.go
+++ b/pkg/fuzzer/fuzzer.go
@@ -29,6 +29,7 @@ type Fuzzer struct {
rnd *rand.Rand
target *prog.Target
hintsLimiter prog.HintsLimiter
+ runningJobs map[jobIntrospector]struct{}
ct *prog.ChoiceTable
ctProgs int
@@ -50,9 +51,10 @@ func NewFuzzer(ctx context.Context, cfg *Config, rnd *rand.Rand,
Config: cfg,
Cover: newCover(),
- ctx: ctx,
- rnd: rnd,
- target: target,
+ ctx: ctx,
+ rnd: rnd,
+ target: target,
+ runningJobs: map[jobIntrospector]struct{}{},
// We're okay to lose some of the messages -- if we are already
// regenerating the table, we don't want to repeat it right away.
@@ -251,10 +253,24 @@ func (fuzzer *Fuzzer) startJob(stat *stat.Val, newJob job) {
fuzzer.Logf(2, "started %T", newJob)
go func() {
stat.Add(1)
+ defer stat.Add(-1)
+
fuzzer.statJobs.Add(1)
+ defer fuzzer.statJobs.Add(-1)
+
+ if obj, ok := newJob.(jobIntrospector); ok {
+ fuzzer.mu.Lock()
+ fuzzer.runningJobs[obj] = struct{}{}
+ fuzzer.mu.Unlock()
+
+ defer func() {
+ fuzzer.mu.Lock()
+ delete(fuzzer.runningJobs, obj)
+ fuzzer.mu.Unlock()
+ }()
+ }
+
newJob.run(fuzzer)
- fuzzer.statJobs.Add(-1)
- stat.Add(-1)
}()
}
@@ -354,6 +370,17 @@ func (fuzzer *Fuzzer) ChoiceTable() *prog.ChoiceTable {
return fuzzer.ct
}
+func (fuzzer *Fuzzer) RunningJobs() []JobInfo {
+ fuzzer.mu.Lock()
+ defer fuzzer.mu.Unlock()
+
+ var ret []JobInfo
+ for item := range fuzzer.runningJobs {
+ ret = append(ret, item.info())
+ }
+ return ret
+}
+
func (fuzzer *Fuzzer) logCurrentStats() {
for {
select {