aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/manager/diff.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2025-01-23 19:07:33 +0100
committerAleksandr Nogikh <nogikh@google.com>2025-01-29 10:31:50 +0000
commit6eea27042142c1c5e810b642deb831a8ed55b3da (patch)
treea883e3ff7d2bfdd0a5d343d220b7d98f66b7639e /pkg/manager/diff.go
parent865ef71e5889541e7310ee9b3da3a945f354da8b (diff)
pkg/manager: avoid log.Fatalf in manager.LoadSeeds
This enables graceful error handling in the caller code.
Diffstat (limited to 'pkg/manager/diff.go')
-rw-r--r--pkg/manager/diff.go28
1 files changed, 22 insertions, 6 deletions
diff --git a/pkg/manager/diff.go b/pkg/manager/diff.go
index a96d4f9a8..17d056e1f 100644
--- a/pkg/manager/diff.go
+++ b/pkg/manager/diff.go
@@ -45,9 +45,15 @@ func RunDiffFuzzer(ctx context.Context, baseCfg, newCfg *mgrconfig.Config, debug
if err != nil {
return err
}
- go func() {
- new.candidates <- LoadSeeds(newCfg, true).Candidates
- }()
+ eg, ctx := errgroup.WithContext(ctx)
+ eg.Go(func() error {
+ info, err := LoadSeeds(newCfg, true)
+ if err != nil {
+ return err
+ }
+ new.candidates <- info.Candidates
+ return nil
+ })
stream := queue.NewRandomQueue(4096, rand.New(rand.NewSource(time.Now().UnixNano())))
base.source = stream
@@ -73,8 +79,10 @@ func RunDiffFuzzer(ctx context.Context, baseCfg, newCfg *mgrconfig.Config, debug
}
new.http = diffCtx.http
}
- diffCtx.Loop(ctx)
- return nil
+ eg.Go(func() error {
+ return diffCtx.Loop(ctx)
+ })
+ return eg.Wait()
}
type diffContext struct {
@@ -343,7 +351,15 @@ func (kc *kernelContext) setupFuzzer(features flatrpc.Feature, syscalls map[*pro
kc.http.Corpus.Store(corpusObj)
}
- filtered := FilterCandidates(<-kc.candidates, syscalls, false).Candidates
+ var candidates []fuzzer.Candidate
+ select {
+ case candidates = <-kc.candidates:
+ case <-kc.ctx.Done():
+ // The loop will be aborted later.
+ break
+ }
+
+ filtered := FilterCandidates(candidates, syscalls, false).Candidates
log.Logf(0, "%s: adding %d seeds", kc.name, len(filtered))
fuzzerObj.AddCandidates(filtered)