From 4dd20d3c0377c037bd6cf1b7645a1d61e87a1ac2 Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Wed, 3 Jun 2026 20:56:04 -0700 Subject: [PATCH] build: fix policy resolver cleanup on errors Keep policy resolver cleanup in a local variable so explicit error returns cannot clear it before deferred cleanup runs. This prevents remote policy progress writers from outliving the build printer. Signed-off-by: Tonis Tiigi --- build/opt.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/opt.go b/build/opt.go index 2e4e7b994..e46045026 100644 --- a/build/opt.go +++ b/build/opt.go @@ -627,7 +627,7 @@ func proxyArgKeyExists(buildArgs map[string]string, key string) bool { return false } -func configureSourcePolicy(ctx context.Context, np *noderesolver.ResolvedNode, opt *Options, cfg *confutil.Config, bopts gateway.BuildOpts, so *client.SolveOpt, pw progress.Writer) (defers []func(error), err error) { +func configureSourcePolicy(ctx context.Context, np *noderesolver.ResolvedNode, opt *Options, cfg *confutil.Config, bopts gateway.BuildOpts, so *client.SolveOpt, pw progress.Writer) (_ []func(error), err error) { if opt.Inputs.policy == nil { if len(opt.Policy) > 0 { return nil, errors.New("policy file specified but no policy FS in build context") @@ -677,7 +677,7 @@ func configureSourcePolicy(ctx context.Context, np *noderesolver.ResolvedNode, o return nil, err } sourceResolver := sourcemeta.NewResolver(c, sourcemeta.WithProgressWriter(pw), sourcemeta.WithSession(so.Session)) - defers = []func(error){ + defers := []func(error){ func(error) { _ = sourceResolver.Close() },