go/src/os
Cherry Mui c4772d30bf cmd/link: disallow pull-only linknames
As mentioned in CL 584598, linkname is a mechanism that, when
abused, can break API integrity and even safety of Go programs.
CL 584598 is a first step to restrict the use of linknames, by
implementing a blocklist. This CL takes a step further, tightening
up the restriction by allowing linkname references ("pull") only
when the definition side explicitly opts into it, by having a
linkname on the definition (possibly to itself). This way, it is at
least clear on the definition side that the symbol, despite being
unexported, is accessed outside of the package. Unexported symbols
without linkname can now be actually private. This is similar to
the symbol visibility rule used by gccgo for years (which defines
unexported non-linknamed symbols as C static symbols).

As there can be pull-only linknames in the wild that may be broken
by this change, we currently only enforce this rule for symbols
defined in the standard library. Push linknames are added in the
standard library to allow things build.

Linkname references to external (non-Go) symbols are still allowed,
as their visibility is controlled by the C symbol visibility rules
and enforced by the C (static or dynamic) linker.

Assembly symbols are treated similar to linknamed symbols.

This is controlled by -checklinkname linker flag, currently not
enabled by default. A follow-up CL will enable it by default.

Change-Id: I07344f5c7a02124dbbef0fbc8fec3b666a4b2b0e
Reviewed-on: https://go-review.googlesource.com/c/go/+/585358
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Russ Cox <rsc@golang.org>
2024-05-15 19:57:43 +00:00
..
exec all: fix a large number of comments 2024-03-26 19:58:28 +00:00
signal os/signal: avoid calling ioctl via syscall.Syscall on BSDs 2024-03-20 10:09:15 +00:00
testdata
user os: add available godoc link 2024-02-26 21:33:12 +00:00
dir.go all: rename internal/safefilepath to internal/filepathlite 2024-04-26 23:07:37 +00:00
dir_darwin.go os: make File.Readdir et al concurrency-safe 2024-04-15 20:52:06 +00:00
dir_plan9.go os: make File.Readdir et al concurrency-safe 2024-04-15 20:52:06 +00:00
dir_unix.go os: use internal/byteorder 2024-05-14 20:11:45 +00:00
dir_windows.go os: make File.Readdir et al concurrency-safe 2024-04-15 20:52:06 +00:00
dirent_aix.go
dirent_dragonfly.go
dirent_freebsd.go
dirent_js.go
dirent_linux.go
dirent_netbsd.go
dirent_openbsd.go
dirent_solaris.go
dirent_wasip1.go os: add wasip1 support 2023-04-07 23:34:21 +00:00
env.go os: add available godoc link 2024-02-26 21:33:12 +00:00
env_test.go os, syscall: update unreachable link about =C: envs 2023-07-04 15:31:54 +00:00
env_unix_test.go
error.go os: add available godoc link 2024-02-26 21:33:12 +00:00
error_errno.go
error_plan9.go
error_test.go os: remove unnecessary return after t.Fatal 2023-05-19 00:41:52 +00:00
error_unix_test.go os: add wasip1 support 2023-04-07 23:34:21 +00:00
error_windows_test.go
example_test.go os: relax tests and add examples for UserCacheDir and UserConfigDir 2024-01-10 17:35:49 +00:00
exec.go os: add available godoc link 2024-02-26 21:33:12 +00:00
exec_plan9.go os: add available godoc link 2024-02-26 21:33:12 +00:00
exec_posix.go Revert "os: make use of pidfd on linux" 2024-02-23 18:31:19 +00:00
exec_unix.go Revert "os: make use of pidfd on linux" 2024-02-23 18:31:19 +00:00
exec_unix_test.go os: use t.Fatalf instead of t.Errorf in TestErrProcessDone 2023-08-07 00:23:04 +00:00
exec_windows.go os: use atomic.Uintptr for Process.handle 2024-02-21 21:23:31 +00:00
exec_windows_test.go os: remove 5ms sleep on Windows in (*Process).Wait 2023-07-26 15:13:24 +00:00
executable.go os: add available godoc link 2024-02-26 21:33:12 +00:00
executable_darwin.go cmd/link: disallow pull-only linknames 2024-05-15 19:57:43 +00:00
executable_dragonfly.go
executable_freebsd.go
executable_path.go
executable_plan9.go
executable_procfs.go os: use stringslite.TrimSuffix 2024-05-05 00:26:04 +00:00
executable_solaris.go cmd/link: disallow pull-only linknames 2024-05-15 19:57:43 +00:00
executable_sysctl.go
executable_test.go all: use ^$ instead of XXXX, NoSuchTestExists to match no tests 2023-09-05 23:35:32 +00:00
executable_wasm.go os: add wasip1 support 2023-04-07 23:34:21 +00:00
executable_windows.go
export_linux_test.go net, os, internal/poll: test for use of sendfile 2024-04-26 18:12:56 +00:00
export_test.go os: ensure File.ReadFrom returns ErrClosed instead of the internal poll.ErrFileClosing 2023-02-27 06:21:27 +00:00
export_unix_test.go os: add wasip1 support 2023-04-07 23:34:21 +00:00
export_windows_test.go os: support relative paths in fixLongPath 2024-04-01 14:34:38 +00:00
fifo_test.go os: kick FIFOs with O_NONBLOCK out of the kqueue on Darwin/iOS 2024-03-19 11:47:23 +00:00
file.go all: rename internal/safefilepath to internal/filepathlite 2024-04-26 23:07:37 +00:00
file_mutex_plan9.go
file_open_unix.go os: add wasip1 support 2023-04-07 23:34:21 +00:00
file_open_wasip1.go os: add wasip1 support 2023-04-07 23:34:21 +00:00
file_plan9.go os: use stringslite.HasPrefix 2024-04-30 15:35:30 +00:00
file_posix.go os: add available godoc link 2024-02-26 21:33:12 +00:00
file_unix.go os: make File.Readdir et al concurrency-safe 2024-04-15 20:52:06 +00:00
file_wasip1.go net: implement wasip1 FileListener and FileConn 2023-05-25 00:12:41 +00:00
file_windows.go os: use filepathlite.FromSlash 2024-04-30 15:38:38 +00:00
getwd.go
os_test.go os: avoid writing within the tree during testing CopyFS 2024-02-23 05:09:01 +00:00
os_unix_test.go os: in TestMkdirStickyUmask, create a non-sticky directory as a control 2023-09-18 17:32:43 +00:00
os_windows_test.go os: remove unused issueNo field 2024-04-16 17:30:45 +00:00
path.go os: use filepathlite.VolumeName 2024-04-30 15:38:09 +00:00
path_plan9.go os: use filepathlite.VolumeName 2024-04-30 15:38:09 +00:00
path_test.go
path_unix.go os: use filepathlite.Base 2024-05-07 18:44:48 +00:00
path_windows.go os: use filepathlite.Base 2024-05-07 18:44:48 +00:00
path_windows_test.go all: fix some typos in comments 2024-04-23 16:37:32 +00:00
pipe2_unix.go os: kick FIFOs with O_NONBLOCK out of the kqueue on Darwin/iOS 2024-03-19 11:47:23 +00:00
pipe_test.go all: use ^TestName$ regular pattern for invoking a single test 2023-09-05 23:35:29 +00:00
pipe_unix.go os: kick FIFOs with O_NONBLOCK out of the kqueue on Darwin/iOS 2024-03-19 11:47:23 +00:00
pipe_wasm.go os: add wasip1 support 2023-04-07 23:34:21 +00:00
proc.go os: add available godoc link 2024-02-26 21:33:12 +00:00
rawconn.go
rawconn_test.go os: add wasip1 support 2023-04-07 23:34:21 +00:00
read_test.go os: change ioutil-test to os-test in test 2024-05-10 02:36:46 +00:00
readfrom_linux_test.go internal/poll, net, os: remove poll.Splice syscall name return value 2024-04-02 21:49:26 +00:00
removeall_at.go os: kick FIFOs with O_NONBLOCK out of the kqueue on Darwin/iOS 2024-03-19 11:47:23 +00:00
removeall_noat.go
removeall_test.go os: reuse buffer pool more aggressively in readdir 2024-03-25 19:21:29 +00:00
stat.go os: add available godoc link 2024-02-26 21:33:12 +00:00
stat_aix.go os: use filepathlite.Base 2024-05-07 18:44:48 +00:00
stat_darwin.go os: use filepathlite.Base 2024-05-07 18:44:48 +00:00
stat_dragonfly.go os: use filepathlite.Base 2024-05-07 18:44:48 +00:00
stat_freebsd.go os: use filepathlite.Base 2024-05-07 18:44:48 +00:00
stat_js.go os: use filepathlite.Base 2024-05-07 18:44:48 +00:00
stat_linux.go os: use filepathlite.Base 2024-05-07 18:44:48 +00:00
stat_netbsd.go os: use filepathlite.Base 2024-05-07 18:44:48 +00:00
stat_openbsd.go os: use filepathlite.Base 2024-05-07 18:44:48 +00:00
stat_plan9.go
stat_solaris.go os: use filepathlite.Base 2024-05-07 18:44:48 +00:00
stat_test.go os: convert poll.ErrFileClosed to ErrClosed for Stat 2024-04-03 22:38:03 +00:00
stat_unix.go os: convert poll.ErrFileClosed to ErrClosed for Stat 2024-04-03 22:38:03 +00:00
stat_wasip1.go os: use filepathlite.Base 2024-05-07 18:44:48 +00:00
stat_windows.go os: use filepathlite.Base 2024-05-07 18:44:48 +00:00
sticky_bsd.go os: add wasip1 support 2023-04-07 23:34:21 +00:00
sticky_notbsd.go os: add wasip1 support 2023-04-07 23:34:21 +00:00
sys.go
sys_aix.go
sys_bsd.go os: add wasip1 support 2023-04-07 23:34:21 +00:00
sys_js.go
sys_linux.go
sys_plan9.go
sys_solaris.go
sys_unix.go
sys_wasip1.go os: add wasip1 support 2023-04-07 23:34:21 +00:00
sys_windows.go
tempfile.go os: document file mode of temporary files 2024-04-12 18:04:39 +00:00
tempfile_test.go
timeout_test.go all: fix spelling errors 2023-06-14 00:03:57 +00:00
types.go os: make File.Readdir et al concurrency-safe 2024-04-15 20:52:06 +00:00
types_plan9.go
types_unix.go
types_windows.go os: use filepathlite.Base 2024-05-07 18:44:48 +00:00
wait6_dragonfly.go
wait6_freebsd64.go
wait6_freebsd_386.go
wait6_freebsd_arm.go
wait6_netbsd.go
wait_unimp.go os: adjust wait6/waitid comment for netbsd 2023-04-11 13:16:52 +00:00
wait_wait6.go
wait_waitid.go os: replace "used to used" with "used to use" in description text 2023-08-07 00:27:57 +00:00
writeto_linux_test.go net, os, internal/poll: test for use of sendfile 2024-04-26 18:12:56 +00:00
zero_copy_linux.go net, os, internal/poll: test for use of sendfile 2024-04-26 18:12:56 +00:00
zero_copy_stub.go net,os: arrange zero-copy of os.File and net.TCPConn to net.UnixConn 2023-11-17 23:16:28 +00:00