aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/manager
diff options
context:
space:
mode:
authorGrigory Bazilevich <g.bazilevich@ispras.ru>2026-03-16 00:42:53 +0300
committerGrigory Bazilevich <g.bazilevich@ispras.ru>2026-03-16 00:42:53 +0300
commitd73fb5436d3a96b6569724f05f0f91c796d98783 (patch)
tree772b50150a0a27ee9cd69ad56d4ad299f8fa5c6d /pkg/manager
parente85973bf4c40062c26b50f499f2e28c849344bee (diff)
pkg/manager: load seeds from crashstore db
Diffstat (limited to 'pkg/manager')
-rw-r--r--pkg/manager/seeds.go31
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) {