aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-01-25 14:28:51 +0100
committerAleksandr Nogikh <nogikh@google.com>2024-01-25 14:10:24 +0000
commitcc4a4020ecb6d62110981f597feea0c04a643efa (patch)
treeca82515358c97c42655b6f20caa599ebc31bf865 /pkg
parent9ade656458416e820337c3ba3d82d5f743cedcad (diff)
db: make ReadCorpus() deterministic
It gives reproducibility to syz_execprog and syz_mutate behavior.
Diffstat (limited to 'pkg')
-rw-r--r--pkg/db/db.go10
1 files changed, 8 insertions, 2 deletions
diff --git a/pkg/db/db.go b/pkg/db/db.go
index 2d75f6489..dcf501f63 100644
--- a/pkg/db/db.go
+++ b/pkg/db/db.go
@@ -16,6 +16,7 @@ import (
"fmt"
"io"
"os"
+ "sort"
"github.com/google/syzkaller/pkg/hash"
"github.com/google/syzkaller/pkg/osutil"
@@ -299,8 +300,13 @@ func ReadCorpus(filename string, target *prog.Target) (progs []*prog.Prog, err e
if err != nil {
return nil, fmt.Errorf("failed to open database file: %w", err)
}
- for _, rec := range db.Records {
- p, err := target.Deserialize(rec.Val, prog.NonStrict)
+ recordKeys := make([]string, 0, len(db.Records))
+ for key := range db.Records {
+ recordKeys = append(recordKeys, key)
+ }
+ sort.Strings(recordKeys)
+ for _, key := range recordKeys {
+ p, err := target.Deserialize(db.Records[key].Val, prog.NonStrict)
if err != nil {
return nil, fmt.Errorf("failed to deserialize corpus program: %w", err)
}