Skip to content
Snippets Groups Projects
  • Kir Kolyshkin's avatar
    a3a584e4
    os: RemoveAll: fix symlink race for unix · a3a584e4
    Kir Kolyshkin authored
    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: default avatarIan Lance Taylor <iant@google.com>
    LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
    Reviewed-by: default avatarAleksa Sarai <cyphar@cyphar.com>
    Reviewed-by: default avatarThan McIntosh <thanm@google.com>
    Auto-Submit: Ian Lance Taylor <iant@google.com>
    a3a584e4
    History
    os: RemoveAll: fix symlink race for unix
    Kir Kolyshkin authored
    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: default avatarIan Lance Taylor <iant@google.com>
    LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
    Reviewed-by: default avatarAleksa Sarai <cyphar@cyphar.com>
    Reviewed-by: default avatarThan McIntosh <thanm@google.com>
    Auto-Submit: Ian Lance Taylor <iant@google.com>
Code owners
Assign users and groups as approvers for specific file changes. Learn more.