]> Cypherpunks repositories - gostls13.git/commit
[release-branch.go1.21] os: RemoveAll: fix symlink race for unix
authorKir Kolyshkin <kolyshkin@gmail.com>
Sun, 26 May 2024 06:08:37 +0000 (23:08 -0700)
committerGopher Robot <gobot@golang.org>
Thu, 30 May 2024 00:12:19 +0000 (00:12 +0000)
commit9488a444d9c752f4e1da19907945c4cc740a6c14
tree93e91e1c2d67516fb40fc03db60db87d49697d77
parentc8e40338cf00f3c1d86c8fb23863ad67a4c72bcc
[release-branch.go1.21] 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.

Fixes #67695.

Change-Id: Ic1111d688eebc8804a87d39d3261c2a6eb33f176
Reviewed-on: https://go-review.googlesource.com/c/go/+/589057
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
src/os/file_unix.go
src/os/removeall_at.go
src/syscall/zerrors_solaris_amd64.go