go/src/os
Kir Kolyshkin a3a584e4ab os: RemoveAll: fix symlink race for unix
Since all the platforms now support O_DIRECTORY flag for open, it can be
used to (together with O_NOFOLLOW) to ensure we open a directory, thus
eliminating the need to call stat before open. This fixes the symlink race,
when a directory is replaced by a symlink in between stat and open calls.

While at it, rename openFdAt to openDirAt, because this function is (and was)
meant for directories only.

NOTE Solaris supports O_DIRECTORY since before Solaris 11 (which is the
only version Go supports since supported version now), and Illumos
always had it. The only missing piece was O_DIRECTORY flag value, which
is taken from golang.org/x/sys/unix.

Updates #52745.

Change-Id: Ic1111d688eebc8804a87d39d3261c2a6eb33f176
Reviewed-on: https://go-review.googlesource.com/c/go/+/588495
Reviewed-by: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Aleksa Sarai <cyphar@cyphar.com>
Reviewed-by: Than McIntosh <thanm@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
2024-05-29 13:52:34 +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 all: change from sort functions to slices functions where feasible 2024-05-23 01:00:11 +00:00
dir.go all: change from sort functions to slices functions where feasible 2024-05-23 01:00:11 +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 all: use new "unix" build tag where appropriate 2022-03-29 16:24:51 +00:00
error.go os: add available godoc link 2024-02-26 21:33:12 +00:00
error_errno.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
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 all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
example_test.go os: relax tests and add examples for UserCacheDir and UserConfigDir 2024-01-10 17:35:49 +00:00
exec.go os: make use of pidfd on linux 2024-05-17 01:23:00 +00:00
exec_plan9.go os: add available godoc link 2024-02-26 21:33:12 +00:00
exec_posix.go os: make use of pidfd on linux 2024-05-17 01:23:00 +00:00
exec_unix.go os: make FindProcess use pidfd on Linux 2024-05-21 15:09:50 +00:00
exec_unix_test.go os: make FindProcess use pidfd on Linux 2024-05-21 15:09:50 +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 all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
executable_plan9.go all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
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 all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
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 os: make FindProcess use pidfd on Linux 2024-05-21 15:09:50 +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 os: use poll.fdMutex for Plan 9 files 2022-10-08 03:57:40 +00:00
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: RemoveAll: fix symlink race for unix 2024-05-29 13:52:34 +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 all: change from sort functions to slices functions where feasible 2024-05-23 01:00:11 +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 all: change from sort functions to slices functions where feasible 2024-05-23 01:00:11 +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 os: clean up tests 2023-01-19 20:45:37 +00:00
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
pidfd_linux.go os: make FindProcess use pidfd on Linux 2024-05-21 15:09:50 +00:00
pidfd_linux_test.go os: make FindProcess use pidfd on Linux 2024-05-21 15:09:50 +00:00
pidfd_other.go os: make FindProcess use pidfd on Linux 2024-05-21 15:09:50 +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 all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
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: RemoveAll: fix symlink race for unix 2024-05-29 13:52:34 +00:00
removeall_noat.go all: use new "unix" build tag where appropriate 2022-03-29 16:24:51 +00:00
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 os: use poll.fdMutex for Plan 9 files 2022-10-08 03:57:40 +00:00
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 all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) 2021-10-28 18:17:57 +00:00
sys_linux.go
sys_plan9.go
sys_solaris.go
sys_unix.go all: use new "unix" build tag where appropriate 2022-03-29 16:24:51 +00:00
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 os: clean up tests 2023-01-19 20:45:37 +00:00
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 os: use poll.fdMutex for Plan 9 files 2022-10-08 03:57:40 +00:00
types_unix.go all: gofmt -w -r 'interface{} -> any' src 2021-12-13 18:45:54 +00:00
types_windows.go os: use filepathlite.Base 2024-05-07 18:44:48 +00:00
wait6_dragonfly.go os: split wait6 syscall wrapper into per-platform files 2022-10-13 21:25:45 +00:00
wait6_freebsd64.go os: split wait6 syscall wrapper into per-platform files 2022-10-13 21:25:45 +00:00
wait6_freebsd_386.go os: split wait6 syscall wrapper into per-platform files 2022-10-13 21:25:45 +00:00
wait6_freebsd_arm.go os: split wait6 syscall wrapper into per-platform files 2022-10-13 21:25:45 +00:00
wait6_netbsd.go os: split wait6 syscall wrapper into per-platform files 2022-10-13 21:25:45 +00:00
wait_unimp.go os: adjust wait6/waitid comment for netbsd 2023-04-11 13:16:52 +00:00
wait_wait6.go os: split wait6 syscall wrapper into per-platform files 2022-10-13 21:25:45 +00:00
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