diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2025-07-16 13:07:06 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2025-07-18 10:09:54 +0000 |
| commit | c517e6bc5f780f06798e6cfd0c82ca796eea57ab (patch) | |
| tree | d46822a9fc9e2fbb6b95354431aa2f9c050ff481 /pkg/manager/diff.go | |
| parent | 765e80d7d623021cdc963eeea44721a28f9386d0 (diff) | |
pkg/manager: fix context propagation to kernelContext
Use the context provided via errgroup.Group so that a single error can
successfully shut down the whole diff fuzzing process.
Diffstat (limited to 'pkg/manager/diff.go')
| -rw-r--r-- | pkg/manager/diff.go | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/pkg/manager/diff.go b/pkg/manager/diff.go index 1b812758b..97515f8f0 100644 --- a/pkg/manager/diff.go +++ b/pkg/manager/diff.go @@ -70,11 +70,11 @@ func RunDiffFuzzer(ctx context.Context, baseCfg, newCfg *mgrconfig.Config, cfg D if cfg.PatchedOnly == nil { return fmt.Errorf("you must set up a patched only channel") } - base, err := setup(ctx, "base", baseCfg, cfg.Debug) + base, err := setup("base", baseCfg, cfg.Debug) if err != nil { return err } - new, err := setup(ctx, "new", newCfg, cfg.Debug) + new, err := setup("new", newCfg, cfg.Debug) if err != nil { return err } @@ -167,9 +167,8 @@ func (dc *diffContext) Loop(baseCtx context.Context) error { }) g.Go(func() error { return dc.monitorPatchedCoverage(ctx) }) - - g.Go(dc.base.Loop) - g.Go(dc.new.Loop) + g.Go(func() error { return dc.base.Loop(ctx) }) + g.Go(func() error { return dc.new.Loop(ctx) }) runner := &reproRunner{done: make(chan reproRunnerResult, 2), kernel: dc.base} statTimer := time.NewTicker(5 * time.Minute) @@ -386,13 +385,12 @@ type kernelContext struct { duplicateInto queue.Executor } -func setup(ctx context.Context, name string, cfg *mgrconfig.Config, debug bool) (*kernelContext, error) { +func setup(name string, cfg *mgrconfig.Config, debug bool) (*kernelContext, error) { osutil.MkdirAll(cfg.Workdir) kernelCtx := &kernelContext{ name: name, debug: debug, - ctx: ctx, cfg: cfg, crashes: make(chan *report.Report, 128), candidates: make(chan []fuzzer.Candidate), @@ -425,13 +423,14 @@ func setup(ctx context.Context, name string, cfg *mgrconfig.Config, debug bool) return kernelCtx, nil } -func (kc *kernelContext) Loop() error { +func (kc *kernelContext) Loop(baseCtx context.Context) error { defer log.Logf(1, "syz-diff (%s): kernel context loop terminated", kc.name) if err := kc.serv.Listen(); err != nil { return fmt.Errorf("failed to start rpc server: %w", err) } - eg, ctx := errgroup.WithContext(kc.ctx) + eg, ctx := errgroup.WithContext(baseCtx) + kc.ctx = ctx eg.Go(func() error { return kc.serv.Serve(ctx) }) |
