aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/corpus/corpus.go
diff options
context:
space:
mode:
authorGrigory Bazilevich <g.bazilevich@ispras.ru>2026-02-15 21:04:35 +0300
committerGrigory Bazilevich <g.bazilevich@ispras.ru>2026-02-15 21:13:31 +0300
commitefbdefc51d8d8ef8024a05119e176b38f3815051 (patch)
treef86ed45caed65b3243a6086b355b43292b133b90 /pkg/corpus/corpus.go
parent6f1aa2f9384c3d4b4579b2da10ef9b1451804919 (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.go14
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 {