aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2025-07-16 13:07:06 +0200
committerAleksandr Nogikh <nogikh@google.com>2025-07-18 10:09:54 +0000
commitc517e6bc5f780f06798e6cfd0c82ca796eea57ab (patch)
treed46822a9fc9e2fbb6b95354431aa2f9c050ff481 /pkg
parent765e80d7d623021cdc963eeea44721a28f9386d0 (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')
-rw-r--r--pkg/manager/diff.go17
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)
})