diff options
| author | Grigory Bazilevich <g.bazilevich@ispras.ru> | 2026-03-16 00:42:53 +0300 |
|---|---|---|
| committer | Grigory Bazilevich <g.bazilevich@ispras.ru> | 2026-03-16 00:42:53 +0300 |
| commit | d73fb5436d3a96b6569724f05f0f91c796d98783 (patch) | |
| tree | 772b50150a0a27ee9cd69ad56d4ad299f8fa5c6d /pkg | |
| parent | e85973bf4c40062c26b50f499f2e28c849344bee (diff) | |
pkg/manager: load seeds from crashstore db
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/manager/seeds.go | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/pkg/manager/seeds.go b/pkg/manager/seeds.go index b2a288054..ac33a5fbc 100644 --- a/pkg/manager/seeds.go +++ b/pkg/manager/seeds.go @@ -123,7 +123,7 @@ type input struct { Err error } -func readInputs(cfg *mgrconfig.Config, db *db.DB, output chan *input) error { +func readInputs(cfg *mgrconfig.Config, corpusdb *db.DB, output chan *input) error { procs := runtime.GOMAXPROCS(0) inputs := make(chan *input, procs) var wg sync.WaitGroup @@ -141,6 +141,22 @@ func readInputs(cfg *mgrconfig.Config, db *db.DB, output chan *input) error { }() } + _ = readInputsFromDB(corpusdb, inputs) + err := readSeedInputs(cfg, inputs) + if err != nil { + return err + } + + reproDB, _ := db.Open(filepath.Join(cfg.Workdir, "repro.db"), false) + readInputsFromDB(reproDB, inputs) + + crashprogDB, _ := db.Open(filepath.Join(cfg.Workdir, "crashprog.db"), false) + readInputsFromDB(crashprogDB, inputs) + + return nil +} + +func readInputsFromDB(db *db.DB, inputs chan<- *input) error { for key, rec := range db.Records { inputs <- &input{ Key: key, @@ -148,6 +164,10 @@ func readInputs(cfg *mgrconfig.Config, db *db.DB, output chan *input) error { Data: rec.Val, } } + return nil +} + +func readSeedInputs(cfg *mgrconfig.Config, inputs chan<- *input) error { seedPath := filepath.Join("sys", cfg.TargetOS, "test") seedDir := filepath.Join(cfg.Syzkaller, seedPath) if osutil.IsExist(seedDir) { @@ -215,7 +235,8 @@ func ParseSeed(target *prog.Target, data []byte) (*prog.Prog, error) { } func ParseSeedWithRequirements(target *prog.Target, data []byte, reqs map[string]bool) ( - *prog.Prog, map[string]bool, error) { + *prog.Prog, map[string]bool, error, +) { return parseProg(target, data, prog.Strict, reqs) } @@ -274,7 +295,8 @@ func MatchRequirements(props, requires map[string]bool) bool { var ErrSkippedTest = errors.New("skipped test based on constraints") func parseProg(target *prog.Target, data []byte, mode prog.DeserializeMode, reqs map[string]bool) ( - *prog.Prog, map[string]bool, error) { + *prog.Prog, map[string]bool, error, +) { properties := parseRequires(data) // Need to check requirements early, as some programs may fail to deserialize // on some arches due to missing syscalls. We also do not want to parse tests @@ -309,7 +331,8 @@ type FilteredCandidates struct { } func FilterCandidates(candidates []fuzzer.Candidate, syscalls map[*prog.Syscall]bool, - dropMinimize bool) FilteredCandidates { + dropMinimize bool, +) FilteredCandidates { var ret FilteredCandidates for _, item := range candidates { if !item.Prog.OnlyContains(syscalls) { |
