From cc4a4020ecb6d62110981f597feea0c04a643efa Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Thu, 25 Jan 2024 14:28:51 +0100 Subject: db: make ReadCorpus() deterministic It gives reproducibility to syz_execprog and syz_mutate behavior. --- pkg/db/db.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'pkg') 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) } -- cgit mrf-deployment