diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-12-06 16:49:37 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-12-06 16:49:37 +0100 |
| commit | c1641491e47613ad780871c3c996fe8025b97708 (patch) | |
| tree | fc7037a9a2c9af9cb647c05fd3d5ca835463ebe4 | |
| parent | d68400a8d17b612757bb456754601b8975a18e06 (diff) | |
pkg/db: provide helper function for database creation
This is needed for both tools/syz-db and tools/syz-trace2syz.
Also, remove code to resolve SHA1 collisions.
Also, don't set db version as we actually want to minimize
and smash these programs like anything else
(not minimizing nor smashing them is only useful during tool testing).
| -rw-r--r-- | pkg/db/db.go | 20 | ||||
| -rw-r--r-- | tools/syz-db/syz-db.go | 18 | ||||
| -rw-r--r-- | tools/syz-trace2syz/trace2syz.go | 30 |
3 files changed, 34 insertions, 34 deletions
diff --git a/pkg/db/db.go b/pkg/db/db.go index 5c2755860..fde371d90 100644 --- a/pkg/db/db.go +++ b/pkg/db/db.go @@ -18,6 +18,7 @@ import ( "io/ioutil" "os" + "github.com/google/syzkaller/pkg/hash" "github.com/google/syzkaller/pkg/log" "github.com/google/syzkaller/pkg/osutil" ) @@ -263,3 +264,22 @@ func deserializeRecord(r *bufio.Reader) (key string, val []byte, seq uint64, err } return } + +// Create creates a new database in the specified file with the specified records. +func Create(filename string, version uint64, records []Record) error { + os.Remove(filename) + db, err := Open(filename) + if err != nil { + return fmt.Errorf("failed to open database file: %v", err) + } + if err := db.BumpVersion(version); err != nil { + return fmt.Errorf("failed to bump database version: %v", err) + } + for _, rec := range records { + db.Save(hash.String(rec.Val), rec.Val, rec.Seq) + } + if err := db.Flush(); err != nil { + return fmt.Errorf("failed to save database file: %v", err) + } + return nil +} diff --git a/tools/syz-db/syz-db.go b/tools/syz-db/syz-db.go index ecf85495c..6aa96a0c0 100644 --- a/tools/syz-db/syz-db.go +++ b/tools/syz-db/syz-db.go @@ -60,14 +60,7 @@ func pack(dir, file string, target *prog.Target, version uint64) { if err != nil { failf("failed to read dir: %v", err) } - os.Remove(file) - db, err := db.Open(file) - if err != nil { - failf("failed to open database file: %v", err) - } - if err := db.BumpVersion(version); err != nil { - failf("failed to bump database version: %v", err) - } + var records []db.Record for _, file := range files { data, err := ioutil.ReadFile(filepath.Join(dir, file.Name())) if err != nil { @@ -93,10 +86,13 @@ func pack(dir, file string, target *prog.Target, version uint64) { fmt.Fprintf(os.Stderr, "fixing hash %v -> %v\n", key, sig) key = sig } - db.Save(key, data, seq) + records = append(records, db.Record{ + Val: data, + Seq: seq, + }) } - if err := db.Flush(); err != nil { - failf("failed to save database file: %v", err) + if err := db.Create(file, version, records); err != nil { + failf("%v", err) } } diff --git a/tools/syz-trace2syz/trace2syz.go b/tools/syz-trace2syz/trace2syz.go index 600171bd9..0a785e629 100644 --- a/tools/syz-trace2syz/trace2syz.go +++ b/tools/syz-trace2syz/trace2syz.go @@ -11,14 +11,11 @@ package main import ( "flag" - "fmt" "io/ioutil" - "os" "path/filepath" "strconv" "github.com/google/syzkaller/pkg/db" - "github.com/google/syzkaller/pkg/hash" "github.com/google/syzkaller/pkg/log" "github.com/google/syzkaller/prog" _ "github.com/google/syzkaller/sys" @@ -34,9 +31,8 @@ var ( ) const ( - goos = "linux" // Target OS - arch = "amd64" // Target architecture - currentDBVersion = 3 // Marked as minimized + goos = "linux" // Target OS + arch = "amd64" // Target architecture ) func main() { @@ -150,24 +146,12 @@ func parseTree(tree *parser.TraceTree, pid int64, target *prog.Target) []*progge } func pack(progs []*prog.Prog) { - corpusDb := "corpus.db" - os.Remove(corpusDb) - syzDb, err := db.Open(corpusDb) - - if err != nil { - log.Fatalf("failed to open database file: %v", err) - } - syzDb.BumpVersion(currentDBVersion) - for i, prog := range progs { - data := prog.Serialize() - key := hash.String(data) - if _, ok := syzDb.Records[key]; ok { - key += fmt.Sprint(i) - } - syzDb.Save(key, data, 0) + var records []db.Record + for _, prog := range progs { + records = append(records, db.Record{Val: prog.Serialize()}) } - if err := syzDb.Flush(); err != nil { - log.Fatalf("failed to save database file: %v", err) + if err := db.Create("corpus.db", 0, records); err != nil { + log.Fatalf("%v", err) } log.Logf(0, "finished!") } |
