]> Cypherpunks repositories - gostls13.git/commit
[release-branch.go1.22] 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 01:14:42 +0000 (01:14 +0000)
commit745657509e0598cc883f63900910ed847d84dfbb
tree46e96a7ec09f3495896a84975f338e328d6edaa6
parent95389d3d9d403f6a408258524556db0c629da049
[release-branch.go1.22] 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 #67696.

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