aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVeronica Radu <veronicaradu@google.com>2019-09-09 19:22:04 +0200
committerDmitry Vyukov <dvyukov@google.com>2019-09-23 15:35:26 +0200
commit5a7028d005c1b6be0aa0288ea1bcf3fdd1163560 (patch)
treee3b2a828ee8d6284cf4a95c94d0170abd3024659
parentbf7e28925b8894ca13f803f66d16cf2b0ae12430 (diff)
pkg/db: moved ReadCorpus function to avoid duplicate code
-rw-r--r--pkg/db/db.go19
-rw-r--r--tools/syz-mutate/mutate.go24
-rw-r--r--tools/syz-stress/stress.go24
3 files changed, 27 insertions, 40 deletions
diff --git a/pkg/db/db.go b/pkg/db/db.go
index e3492031b..17723b224 100644
--- a/pkg/db/db.go
+++ b/pkg/db/db.go
@@ -21,6 +21,7 @@ import (
"github.com/google/syzkaller/pkg/hash"
"github.com/google/syzkaller/pkg/log"
"github.com/google/syzkaller/pkg/osutil"
+ "github.com/google/syzkaller/prog"
)
type DB struct {
@@ -283,3 +284,21 @@ func Create(filename string, version uint64, records []Record) error {
}
return nil
}
+
+func ReadCorpus(filename string, target *prog.Target) (progs []*prog.Prog, err error) {
+ if filename == "" {
+ return
+ }
+ db, err := Open(filename)
+ if err != nil {
+ return nil, fmt.Errorf("failed to open database file: %v", err)
+ }
+ for _, rec := range db.Records {
+ p, err := target.Deserialize(rec.Val, prog.NonStrict)
+ if err != nil {
+ return nil, fmt.Errorf("failed to deserialize corpus program: %v", err)
+ }
+ progs = append(progs, p)
+ }
+ return progs, nil
+}
diff --git a/tools/syz-mutate/mutate.go b/tools/syz-mutate/mutate.go
index 56aab8ee1..bde2a27d6 100644
--- a/tools/syz-mutate/mutate.go
+++ b/tools/syz-mutate/mutate.go
@@ -58,9 +58,10 @@ func main() {
if *flagSeed != -1 {
seed = int64(*flagSeed)
}
- var corpus []*prog.Prog
- if *flagCorpus != "" {
- corpus = readCorpus(*flagCorpus, target)
+ corpus, err := db.ReadCorpus(*flagCorpus, target)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "failed to read corpus: %v", err)
+ os.Exit(1)
}
rs := rand.NewSource(seed)
prios := target.CalculatePriorities(corpus)
@@ -83,20 +84,3 @@ func main() {
}
fmt.Printf("%s\n", p.Serialize())
}
-
-func readCorpus(filename string, target *prog.Target) (corpus []*prog.Prog) {
- dbObj, err := db.Open(filename)
- if err != nil {
- fmt.Fprintf(os.Stderr, "failed to open the corpus file: %v\n", err)
- os.Exit(1)
- }
- for _, v := range dbObj.Records {
- p, err := target.Deserialize(v.Val, prog.NonStrict)
- if err != nil {
- fmt.Fprintf(os.Stderr, "failed to deserialize the program: %v\n", err)
- os.Exit(1)
- }
- corpus = append(corpus, p)
- }
- return corpus
-}
diff --git a/tools/syz-stress/stress.go b/tools/syz-stress/stress.go
index 5ca0c5347..af78906ab 100644
--- a/tools/syz-stress/stress.go
+++ b/tools/syz-stress/stress.go
@@ -57,7 +57,10 @@ func main() {
if err != nil {
log.Fatalf("%v", err)
}
- corpus := readCorpus(target)
+ corpus, err := db.ReadCorpus(*flagCorpus, target)
+ if err != nil {
+ log.Fatalf("failed to read corpus: %v", err)
+ }
log.Logf(0, "parsed %v programs", len(corpus))
if !*flagGenerate && len(corpus) == 0 {
log.Fatalf("nothing to mutate (-generate=false and no corpus)")
@@ -153,25 +156,6 @@ func execute(pid int, env *ipc.Env, execOpts *ipc.ExecOpts, p *prog.Prog) {
}
}
-func readCorpus(target *prog.Target) []*prog.Prog {
- if *flagCorpus == "" {
- return nil
- }
- db, err := db.Open(*flagCorpus)
- if err != nil {
- log.Fatalf("failed to open corpus database: %v", err)
- }
- var progs []*prog.Prog
- for _, rec := range db.Records {
- p, err := target.Deserialize(rec.Val, prog.NonStrict)
- if err != nil {
- log.Fatalf("failed to deserialize corpus program: %v", err)
- }
- progs = append(progs, p)
- }
- return progs
-}
-
func buildCallList(target *prog.Target, enabled []string) map[*prog.Syscall]bool {
if *flagOS != runtime.GOOS {
// This is currently used on akaros, where syz-stress runs on host.