diff --git a/RELEASES.md b/RELEASES.md index 486b0d9a86ff..9b718264de2b 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,4 +1,26 @@ -------------------------------------------------------------------------------- +## 9.0.2 + +Released 2023-05-26. + +### Fixed + +* Fix Wasi rights system to work with wasi-libc. This regression was + introduced in the 9.0.0 release. + [#6462](https://github.com/bytecodealliance/wasmtime/pull/6462) + [#6471](https://github.com/bytecodealliance/wasmtime/pull/6471) + +-------------------------------------------------------------------------------- + +## 9.0.1 + +Released 2023-05-22. +### Fixed +* A panic which happened when enabling support for native platform profilers was + fixed. + [#6435](https://github.com/bytecodealliance/wasmtime/pull/6435) + +-------------------------------------------------------------------------------- ## 9.0.0 diff --git a/crates/wasi-common/cap-std-sync/src/lib.rs b/crates/wasi-common/cap-std-sync/src/lib.rs index 15a5bec35aa7..d26d25efb279 100644 --- a/crates/wasi-common/cap-std-sync/src/lib.rs +++ b/crates/wasi-common/cap-std-sync/src/lib.rs @@ -49,7 +49,7 @@ pub use sched::sched_ctx; use crate::net::Socket; use cap_rand::{Rng, RngCore, SeedableRng}; use std::path::Path; -use wasi_common::{file::FileAccessMode, table::Table, Error, WasiCtx, WasiFile}; +use wasi_common::{table::Table, Error, WasiCtx, WasiFile}; pub struct WasiCtxBuilder(WasiCtx); @@ -126,8 +126,7 @@ impl WasiCtxBuilder { pub fn preopened_socket(self, fd: u32, socket: impl Into) -> Result { let socket: Socket = socket.into(); let file: Box = socket.into(); - self.0 - .insert_file(fd, file, FileAccessMode::READ | FileAccessMode::WRITE); + self.0.insert_file(fd, file); Ok(self) } pub fn build(self) -> WasiCtx { diff --git a/crates/wasi-common/src/ctx.rs b/crates/wasi-common/src/ctx.rs index 0d8d495dcfda..1dd3d739e3b6 100644 --- a/crates/wasi-common/src/ctx.rs +++ b/crates/wasi-common/src/ctx.rs @@ -51,18 +51,17 @@ impl WasiCtx { s } - pub fn insert_file(&self, fd: u32, file: Box, access_mode: FileAccessMode) { + fn insert_file_(&self, fd: u32, file: Box, access_mode: FileAccessMode) { self.table() .insert_at(fd, Arc::new(FileEntry::new(file, access_mode))); } + pub fn insert_file(&self, fd: u32, file: Box) { + self.insert_file_(fd, file, FileAccessMode::all()) + } - pub fn push_file( - &self, - file: Box, - access_mode: FileAccessMode, - ) -> Result { + pub fn push_file(&self, file: Box) -> Result { self.table() - .push(Arc::new(FileEntry::new(file, access_mode))) + .push(Arc::new(FileEntry::new(file, FileAccessMode::all()))) } pub fn insert_dir(&self, fd: u32, dir: Box, path: PathBuf) { @@ -98,15 +97,15 @@ impl WasiCtx { } pub fn set_stdin(&self, f: Box) { - self.insert_file(0, f, FileAccessMode::READ); + self.insert_file_(0, f, FileAccessMode::READ); } pub fn set_stdout(&self, f: Box) { - self.insert_file(1, f, FileAccessMode::WRITE); + self.insert_file_(1, f, FileAccessMode::WRITE); } pub fn set_stderr(&self, f: Box) { - self.insert_file(2, f, FileAccessMode::WRITE); + self.insert_file_(2, f, FileAccessMode::WRITE); } pub fn push_preopened_dir( diff --git a/crates/wasi-common/src/file.rs b/crates/wasi-common/src/file.rs index 6aaea63aeb5a..49719c0a9d28 100644 --- a/crates/wasi-common/src/file.rs +++ b/crates/wasi-common/src/file.rs @@ -224,7 +224,7 @@ pub(crate) struct FileEntry { } bitflags! { - pub struct FileAccessMode : u32 { + pub(crate) struct FileAccessMode : u32 { const READ = 0b1; const WRITE= 0b10; } @@ -239,7 +239,6 @@ impl FileEntry { Ok(FdStat { filetype: self.file.get_filetype().await?, flags: self.file.get_fdflags().await?, - access_mode: self.access_mode, }) } } @@ -248,7 +247,6 @@ impl FileEntry { pub struct FdStat { pub filetype: FileType, pub flags: FdFlags, - pub access_mode: FileAccessMode, } #[derive(Debug, Clone)] diff --git a/crates/wasi-common/src/snapshots/preview_1.rs b/crates/wasi-common/src/snapshots/preview_1.rs index edec2e2200a6..34f83b07219c 100644 --- a/crates/wasi-common/src/snapshots/preview_1.rs +++ b/crates/wasi-common/src/snapshots/preview_1.rs @@ -172,7 +172,14 @@ impl wasi_snapshot_preview1::WasiSnapshotPreview1 for WasiCtx { if table.is::(fd) { let file_entry: Arc = table.get(fd)?; let fdstat = file_entry.get_fdstat().await?; - Ok(types::Fdstat::from(&fdstat)) + let mut fdstat = types::Fdstat::from(&fdstat); + if file_entry.access_mode.contains(FileAccessMode::READ) { + fdstat.fs_rights_base |= types::Rights::FD_READ; + } + if file_entry.access_mode.contains(FileAccessMode::WRITE) { + fdstat.fs_rights_base |= types::Rights::FD_WRITE; + } + Ok(fdstat) } else if table.is::(fd) { let _dir_entry: Arc = table.get(fd)?; let dir_fdstat = types::Fdstat { @@ -1240,16 +1247,9 @@ impl From for Advice { impl From<&FdStat> for types::Fdstat { fn from(fdstat: &FdStat) -> types::Fdstat { - let mut fs_rights_base = types::Rights::empty(); - if fdstat.access_mode.contains(FileAccessMode::READ) { - fs_rights_base |= types::Rights::FD_READ; - } - if fdstat.access_mode.contains(FileAccessMode::WRITE) { - fs_rights_base |= types::Rights::FD_WRITE; - } types::Fdstat { fs_filetype: types::Filetype::from(&fdstat.filetype), - fs_rights_base, + fs_rights_base: types::Rights::empty(), fs_rights_inheriting: types::Rights::empty(), fs_flags: types::Fdflags::from(fdstat.flags), } diff --git a/crates/wasi-common/tokio/src/lib.rs b/crates/wasi-common/tokio/src/lib.rs index 250aaabb4f7f..5a17b17816bb 100644 --- a/crates/wasi-common/tokio/src/lib.rs +++ b/crates/wasi-common/tokio/src/lib.rs @@ -9,7 +9,7 @@ pub mod stdio; use std::future::Future; use std::path::Path; pub use wasi_cap_std_sync::{clocks_ctx, random_ctx}; -use wasi_common::{file::FileAccessMode, Error, Table, WasiCtx, WasiFile}; +use wasi_common::{Error, Table, WasiCtx, WasiFile}; use crate::sched::sched_ctx; pub use dir::Dir; @@ -96,8 +96,7 @@ impl WasiCtxBuilder { pub fn preopened_socket(self, fd: u32, socket: impl Into) -> Result { let socket: Socket = socket.into(); let file: Box = socket.into(); - self.0 - .insert_file(fd, file, FileAccessMode::READ | FileAccessMode::WRITE); + self.0.insert_file(fd, file); Ok(self) }