aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeal Patel <nealpatel@google.com>2026-02-24 23:05:34 +0000
committerGopher Robot <gobot@golang.org>2026-04-07 12:14:48 -0700
commitabaa0cbb259e059ee60c33a7507eddc1fe7d20fa (patch)
tree672153c7c10ab798bb4f9b99e870a78816069ac0
parent02f574a8303560a4a79a42834f3092ce7c9a57cc (diff)
downloadgo-abaa0cbb259e059ee60c33a7507eddc1fe7d20fa.tar.xz
[release-branch.go1.25] cmd/go: disallow cgo trust boundary bypass
The cgo compiler implicitly trusts generated files with 'cgo' prefixes; thus, SWIG files containing 'cgo' in their names will cause bypass of the trust boundary, leading to code smuggling or arbitrary code execution. The cgo compiler will now produce an error if it encounters any SWIG files containing this prefix. Thanks to Juho Forsén of Mattermost for reporting this issue. Fixes #78335 Fixes CVE-2026-27140 Change-Id: I44185a84e07739b3b347efdb86be7d8fa560b030 Reviewed-on: https://go-internal-review.googlesource.com/c/go/+/3520 Reviewed-by: Nicholas Husin <husin@google.com> Reviewed-by: Damien Neil <dneil@google.com> Reviewed-on: https://go-internal-review.googlesource.com/c/go/+/3989 Reviewed-on: https://go-review.googlesource.com/c/go/+/763556 Reviewed-by: David Chase <drchase@google.com> TryBot-Bypass: Gopher Robot <gobot@golang.org> Reviewed-by: Junyang Shao <shaojunyang@google.com> Auto-Submit: Gopher Robot <gobot@golang.org>
-rw-r--r--src/cmd/go/internal/work/exec.go4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go
index 6bfc83aae2..8c3bac51e6 100644
--- a/src/cmd/go/internal/work/exec.go
+++ b/src/cmd/go/internal/work/exec.go
@@ -3231,6 +3231,10 @@ func (b *Builder) swigIntSize(objdir string) (intsize string, err error) {
// Run SWIG on one SWIG input file.
func (b *Builder) swigOne(a *Action, file, objdir string, pcCFLAGS []string, cxx bool, intgosize string) (outGo, outC string, err error) {
+ if strings.HasPrefix(file, "cgo") {
+ return "", "", errors.New("SWIG file must not use prefix 'cgo'")
+ }
+
p := a.Package
sh := b.Shell(a)