libc-wasi: Make rights of STDIN/STDOUT/STDERR fixed and overlook their access modes (#3694)
When determining the file descriptor rights in the function fd_determine_type_rights(), we assign fixed and unchangeable rights to STDIN, STDOUT and STDERR. ps. https://github.com/bytecodealliance/wasm-micro-runtime/issues/3686
This commit is contained in:
@ -459,8 +459,27 @@ fd_determine_type_rights(os_file_handle fd, __wasi_filetype_t *type,
|
||||
__wasi_rights_t *rights_inheriting)
|
||||
{
|
||||
struct __wasi_filestat_t buf;
|
||||
__wasi_errno_t error = os_fstat(fd, &buf);
|
||||
__wasi_errno_t error;
|
||||
|
||||
if (os_is_stdin_handle(fd)) {
|
||||
*rights_base = RIGHTS_STDIN;
|
||||
*rights_inheriting = RIGHTS_STDIN;
|
||||
return __WASI_ESUCCESS;
|
||||
}
|
||||
|
||||
if (os_is_stdout_handle(fd)) {
|
||||
*rights_base = RIGHTS_STDOUT;
|
||||
*rights_inheriting = RIGHTS_STDOUT;
|
||||
return __WASI_ESUCCESS;
|
||||
}
|
||||
|
||||
if (os_is_stderr_handle(fd)) {
|
||||
*rights_base = RIGHTS_STDERR;
|
||||
*rights_inheriting = RIGHTS_STDERR;
|
||||
return __WASI_ESUCCESS;
|
||||
}
|
||||
|
||||
error = os_fstat(fd, &buf);
|
||||
if (error != __WASI_ESUCCESS)
|
||||
return error;
|
||||
|
||||
|
||||
@ -47,6 +47,19 @@
|
||||
#define RIGHTS_CHARACTER_DEVICE_BASE RIGHTS_ALL
|
||||
#define RIGHTS_CHARACTER_DEVICE_INHERITING RIGHTS_ALL
|
||||
|
||||
#define RIGHTS_STDIN \
|
||||
(__WASI_RIGHT_FD_ADVISE | __WASI_RIGHT_FD_FILESTAT_GET | \
|
||||
__WASI_RIGHT_FD_READ | __WASI_RIGHT_FD_WRITE | \
|
||||
__WASI_RIGHT_POLL_FD_READWRITE)
|
||||
|
||||
#define RIGHTS_STDOUT \
|
||||
(__WASI_RIGHT_FD_ADVISE | __WASI_RIGHT_FD_DATASYNC | \
|
||||
__WASI_RIGHT_FD_FILESTAT_GET | __WASI_RIGHT_FD_SYNC | \
|
||||
__WASI_RIGHT_FD_READ | __WASI_RIGHT_FD_WRITE | \
|
||||
__WASI_RIGHT_POLL_FD_READWRITE)
|
||||
|
||||
#define RIGHTS_STDERR RIGHTS_STDOUT
|
||||
|
||||
// Only allow directory operations on directories. Directories can only
|
||||
// yield file descriptors to other directories and files.
|
||||
#define RIGHTS_DIRECTORY_BASE \
|
||||
|
||||
Reference in New Issue
Block a user