From d73fb5436d3a96b6569724f05f0f91c796d98783 Mon Sep 17 00:00:00 2001 From: Grigory Bazilevich Date: Mon, 16 Mar 2026 00:42:53 +0300 Subject: pkg/manager: load seeds from crashstore db --- pkg/manager/seeds.go | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'pkg/manager') 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) { -- cgit mrf-deployment