syscall: remove wasip1 O_DIRECTORY workaround

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>
This commit is contained in:
Achille Roussel 2023-04-27 14:37:55 -07:00 committed by Gopher Robot
parent afe2d22219
commit da3a184b18
1 changed files with 0 additions and 23 deletions

View 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: