]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: disallow linkname of runtime.addmoduledata
authorzuojunwei.1024 <zuojunwei.1024@bytedance.com>
Thu, 28 Aug 2025 09:32:09 +0000 (17:32 +0800)
committerWayne Zuo <wdvxdr1123@gmail.com>
Fri, 29 Aug 2025 16:36:19 +0000 (09:36 -0700)
Although a comment on addmoduledata warns that it should not be
called from Go code, the linker still allow it to be accessed via
go:linkname. Using linkname on this function will cause a linker
crash when building with buildmode=plugin.

Fixes #75180

Change-Id: Ib72c367a8afaef712ca5e29b1d0a4fc98ed8f40f
Reviewed-on: https://go-review.googlesource.com/c/go/+/699655
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/cmd/link/internal/loader/loader.go
src/cmd/link/link_test.go
src/cmd/link/testdata/linkname/addmoduledata.go [new file with mode: 0644]

index a02a268880c5fd5f48c1661f2e66602473a2504e..9f3ea3e553dd7ced38bd0478d9b5a1c598df07a4 100644 (file)
@@ -2440,6 +2440,7 @@ var blockedLinknames = map[string][]string{
        // Others
        "net.newWindowsFile":                   {"net"},              // pushed from os
        "testing/synctest.testingSynctestTest": {"testing/synctest"}, // pushed from testing
+       "runtime.addmoduledata":                {},                   // disallow all package
 }
 
 // check if a linkname reference to symbol s from pkg is allowed
index 2fe32600f1d6c7afad73e7d11d5e4ae0e7013472..a87d452ed39446c461beec7690d1a1224e8db734 100644 (file)
@@ -1613,6 +1613,7 @@ func TestCheckLinkname(t *testing.T) {
                {"coro2.go", false},
                // pull linkname of a builtin symbol is not ok
                {"builtin.go", false},
+               {"addmoduledata.go", false},
                // legacy bad linkname is ok, for now
                {"fastrand.go", true},
                {"badlinkname.go", true},
diff --git a/src/cmd/link/testdata/linkname/addmoduledata.go b/src/cmd/link/testdata/linkname/addmoduledata.go
new file mode 100644 (file)
index 0000000..40d2b57
--- /dev/null
@@ -0,0 +1,18 @@
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Linkname runtime.addmoduledata is not allowed.
+
+package main
+
+import (
+       _ "unsafe"
+)
+
+//go:linkname addmoduledata runtime.addmoduledata
+func addmoduledata()
+
+func main() {
+       addmoduledata()
+}