diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2024-10-14 15:26:12 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2024-10-14 19:43:15 +0000 |
| commit | 56381a3b0c5178a73a7ad714a54dab5ab47e0ffa (patch) | |
| tree | d62feb1fcd398ab524b76c8aaedb1278a9c20f3b | |
| parent | 25a669a944a3f6c35bfb05123e5cd2215fd5d23b (diff) | |
pkg/runtest: rely on pkg/manager seed loading logic
It will help us catch broken seeds right in TestParse().
| -rw-r--r-- | pkg/manager/seeds.go | 16 | ||||
| -rw-r--r-- | pkg/runtest/run.go | 3 | ||||
| -rw-r--r-- | syz-manager/hub.go | 2 |
3 files changed, 15 insertions, 6 deletions
diff --git a/pkg/manager/seeds.go b/pkg/manager/seeds.go index 80248f04c..1e674c2f9 100644 --- a/pkg/manager/seeds.go +++ b/pkg/manager/seeds.go @@ -56,7 +56,7 @@ func LoadSeeds(cfg *mgrconfig.Config, immutable bool) Seeds { go func() { defer wg.Done() for inp := range inputs { - inp.Prog, inp.Err = LoadProg(cfg.Target, inp.Data) + inp.Prog, inp.Err = ParseSeed(cfg.Target, inp.Data) outputs <- inp } }() @@ -178,13 +178,21 @@ func versionToFlags(version uint64) fuzzer.ProgFlags { return corpusFlags } -func LoadProg(target *prog.Target, data []byte) (*prog.Prog, error) { - p, err := target.Deserialize(data, prog.NonStrict) +func ParseSeed(target *prog.Target, data []byte) (*prog.Prog, error) { + return parseProg(target, data, prog.NonStrict) +} + +func ParseSeedStrict(target *prog.Target, data []byte) (*prog.Prog, error) { + return parseProg(target, data, prog.Strict) +} + +func parseProg(target *prog.Target, data []byte, mode prog.DeserializeMode) (*prog.Prog, error) { + p, err := target.Deserialize(data, mode) if err != nil { return nil, err } if len(p.Calls) > prog.MaxCalls { - return nil, fmt.Errorf("longer than %d calls", prog.MaxCalls) + return nil, fmt.Errorf("longer than %d calls (%d)", prog.MaxCalls, len(p.Calls)) } // For some yet unknown reasons, programs with fail_nth > 0 may sneak in. Ignore them. for _, call := range p.Calls { diff --git a/pkg/runtest/run.go b/pkg/runtest/run.go index eb1d0b131..1ea5c7a7e 100644 --- a/pkg/runtest/run.go +++ b/pkg/runtest/run.go @@ -26,6 +26,7 @@ import ( "github.com/google/syzkaller/pkg/csource" "github.com/google/syzkaller/pkg/flatrpc" "github.com/google/syzkaller/pkg/fuzzer/queue" + "github.com/google/syzkaller/pkg/manager" "github.com/google/syzkaller/prog" "github.com/google/syzkaller/sys/targets" ) @@ -310,7 +311,7 @@ func parseProg(target *prog.Target, dir, filename string, requires map[string]bo if !checkArch(properties, target.Arch) || !match(properties, requires) { return nil, nil, nil, nil } - p, err := target.Deserialize(data, prog.Strict) + p, err := manager.ParseSeedStrict(target, data) if err != nil { return nil, nil, nil, fmt.Errorf("failed to deserialize %v: %w", filename, err) } diff --git a/syz-manager/hub.go b/syz-manager/hub.go index 4f0a02de0..2c10a80f4 100644 --- a/syz-manager/hub.go +++ b/syz-manager/hub.go @@ -313,7 +313,7 @@ func (hc *HubConnector) processRepros(repros [][]byte) int { } func (hc *HubConnector) parseProgram(data []byte) (*prog.Prog, error) { - p, err := manager.LoadProg(hc.target, data) + p, err := manager.ParseSeed(hc.target, data) if err != nil { return nil, err } |
