]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: remove wasip1 O_DIRECTORY workaround
authorAchille Roussel <achille.roussel@gmail.com>
Thu, 27 Apr 2023 21:37:55 +0000 (14:37 -0700)
committerGopher Robot <gobot@golang.org>
Fri, 28 Apr 2023 01:27:53 +0000 (01:27 +0000)
Wasmtime used to error when opening a directory without passing the
O_DIRECTORY flag, which required doing a stat to determine whether to
inject the flag prior to opening any file.

The workaround was subject to races since the stat and open calls were
not atomic.

Wasmtime fixed the issue in v8.0.1.

For details see:
- https://github.com/bytecodealliance/wasmtime/pull/4967
- https://github.com/bytecodealliance/wasmtime/pull/6163
- https://github.com/bytecodealliance/wasmtime/releases/tag/v8.0.1

Change-Id: I0f9fe6a696024b70fffe63b83e8f61e48acd0c4a
Reviewed-on: https://go-review.googlesource.com/c/go/+/489955
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
src/syscall/fs_wasip1.go

index b331629d791c5c9d676c89f0f143eb4124c30080..ef04af69660599ce6b7e2d66568d8fab0c736458 100644 (file)
@@ -432,29 +432,6 @@ func Open(path string, openmode int, perm uint32) (int, error) {
                oflags |= OFLAG_EXCL
        }
 
-       // Remove when https://github.com/bytecodealliance/wasmtime/pull/4967 is merged.
-       var fi Stat_t
-       if errno := path_filestat_get(
-               dirFd,
-               LOOKUP_SYMLINK_FOLLOW,
-               pathPtr,
-               pathLen,
-               unsafe.Pointer(&fi),
-       ); errno != 0 && errno != ENOENT {
-               return -1, errnoErr(errno)
-       }
-       if fi.Filetype == FILETYPE_DIRECTORY {
-               oflags |= OFLAG_DIRECTORY
-               // WASM runtimes appear to return EINVAL when passing invalid
-               // combination of flags to open directories; however, TestOpenError
-               // in the os package expects EISDIR, so we precheck this condition
-               // here to emulate the expected behavior.
-               const invalidFlags = O_WRONLY | O_RDWR | O_CREATE | O_APPEND | O_TRUNC | O_EXCL
-               if (openmode & invalidFlags) != 0 {
-                       return 0, EISDIR
-               }
-       }
-
        var rights rights
        switch openmode & (O_RDONLY | O_WRONLY | O_RDWR) {
        case O_RDONLY: