diff options
| author | Grigory Bazilevich <g.bazilevich@ispras.ru> | 2026-02-15 21:04:35 +0300 |
|---|---|---|
| committer | Grigory Bazilevich <g.bazilevich@ispras.ru> | 2026-02-15 21:13:31 +0300 |
| commit | efbdefc51d8d8ef8024a05119e176b38f3815051 (patch) | |
| tree | f86ed45caed65b3243a6086b355b43292b133b90 /pkg/corpus/corpus.go | |
| parent | 6f1aa2f9384c3d4b4579b2da10ef9b1451804919 (diff) | |
pkg/corpus: update Programs List priority storage
Static prefix sums have been replaced with a Fenwick tree.
In the current syzkaller, program priority was set based on a Signal
received by a single system call. This commit allows priority to be
changed dynamically, making it possible to maintain priority based on
Signals from all system calls.
Signed-off-by: Grigory Bazilevich <g.bazilevich@ispras.ru>
Diffstat (limited to 'pkg/corpus/corpus.go')
| -rw-r--r-- | pkg/corpus/corpus.go | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/pkg/corpus/corpus.go b/pkg/corpus/corpus.go index 594521fcc..54c8d96cd 100644 --- a/pkg/corpus/corpus.go +++ b/pkg/corpus/corpus.go @@ -131,6 +131,7 @@ func (corpus *Corpus) Save(inp NewInput) { corpus.mu.Lock() defer corpus.mu.Unlock() + var newItem *Item = nil update := ItemUpdate{ Call: inp.Call, RawCover: inp.RawCover, @@ -143,7 +144,7 @@ func (corpus *Corpus) Save(inp NewInput) { var newCover cover.Cover newCover.Merge(old.Cover) newCover.Merge(inp.Cover) - newItem := &Item{ + newItem = &Item{ Sig: sig, Prog: old.Prog, Call: old.Call, @@ -157,10 +158,8 @@ func (corpus *Corpus) Save(inp NewInput) { if len(newItem.Updates) < maxUpdates { newItem.Updates = append(newItem.Updates, update) } - corpus.progsMap[sig] = newItem - corpus.applyFocusAreas(newItem, inp.Cover) } else { - item := &Item{ + newItem = &Item{ Sig: sig, Call: inp.Call, Prog: inp.Prog, @@ -169,10 +168,11 @@ func (corpus *Corpus) Save(inp NewInput) { Cover: inp.Cover, Updates: []ItemUpdate{update}, } - corpus.progsMap[sig] = item - corpus.applyFocusAreas(item, inp.Cover) - corpus.saveProgram(inp.Prog, inp.Signal) } + corpus.progsMap[sig] = newItem + corpus.applyFocusAreas(newItem, newItem.Cover) + corpus.saveProgram(inp.Prog, newItem.Signal) + corpus.signal.Merge(inp.Signal) newCover := corpus.cover.MergeDiff(inp.Cover) if corpus.updates != nil { |
