From b4b18c650bb9381b73385d76c62a626dfaa66104 Mon Sep 17 00:00:00 2001 From: Johnathan Sharratt Date: Wed, 3 Apr 2024 11:00:08 +1100 Subject: [PATCH 1/5] Various fixes detected in the build --- lib/api/src/engine.rs | 1 + lib/compiler-cranelift/src/trampoline/mod.rs | 4 +- lib/compiler-cranelift/src/translator/mod.rs | 6 +- lib/compiler/src/engine/error.rs | 2 +- lib/compiler/src/lib.rs | 1 + lib/journal/src/concrete/mod.rs | 2 - lib/virtual-fs/src/arc_box_file.rs | 7 +- lib/virtual-fs/src/arc_file.rs | 7 +- lib/virtual-fs/src/buffer_file.rs | 5 +- lib/virtual-fs/src/combine_file.rs | 4 +- lib/virtual-fs/src/cow_file.rs | 6 +- lib/virtual-fs/src/dual_write_file.rs | 4 +- lib/virtual-fs/src/host_fs.rs | 16 ++-- lib/virtual-fs/src/lib.rs | 2 +- lib/virtual-fs/src/mem_fs/file.rs | 79 +++++++++---------- lib/virtual-fs/src/mem_fs/stdio.rs | 6 +- lib/virtual-fs/src/null_file.rs | 5 +- lib/virtual-fs/src/overlay_fs.rs | 33 ++++---- lib/virtual-fs/src/pipe.rs | 5 +- lib/virtual-fs/src/random_file.rs | 5 +- lib/virtual-fs/src/special_file.rs | 5 +- lib/virtual-fs/src/static_file.rs | 5 +- lib/virtual-fs/src/static_fs.rs | 4 +- lib/virtual-fs/src/trace_fs.rs | 4 +- lib/virtual-fs/src/union_fs.rs | 2 +- lib/virtual-fs/src/webc_fs.rs | 4 +- lib/virtual-fs/src/webc_volume_fs.rs | 4 +- lib/virtual-fs/src/zero_file.rs | 5 +- lib/wasix/src/fs/inode_guard.rs | 15 +--- .../src/os/command/builtins/cmd_wasmer.rs | 2 +- lib/wasix/src/runners/wasi.rs | 2 +- lib/wasix/src/runtime/resolver/wapm_source.rs | 4 +- lib/wasix/src/state/env.rs | 7 +- .../src/syscalls/wasi/path_unlink_file.rs | 7 +- tests/lib/wast/src/wasi_wast.rs | 2 +- 35 files changed, 121 insertions(+), 151 deletions(-) diff --git a/lib/api/src/engine.rs b/lib/api/src/engine.rs index 873920fd842..820d4d9054c 100644 --- a/lib/api/src/engine.rs +++ b/lib/api/src/engine.rs @@ -13,6 +13,7 @@ use std::path::Path; #[cfg(feature = "sys")] use std::sync::Arc; #[cfg(feature = "sys")] +#[allow(unused_imports)] pub use wasmer_compiler::{Artifact, CompilerConfig, EngineInner, Features, Tunables}; #[cfg(feature = "sys")] use wasmer_types::DeserializeError; diff --git a/lib/compiler-cranelift/src/trampoline/mod.rs b/lib/compiler-cranelift/src/trampoline/mod.rs index 0752a49d86f..3c8c4021c3c 100644 --- a/lib/compiler-cranelift/src/trampoline/mod.rs +++ b/lib/compiler-cranelift/src/trampoline/mod.rs @@ -6,6 +6,4 @@ mod function_call; pub use self::dynamic_function::make_trampoline_dynamic_function; pub use self::function_call::make_trampoline_function_call; -pub use cranelift_codegen::print_errors::pretty_error; -pub use cranelift_codegen::Context; -pub use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext}; +pub use cranelift_frontend::FunctionBuilderContext; diff --git a/lib/compiler-cranelift/src/translator/mod.rs b/lib/compiler-cranelift/src/translator/mod.rs index 5102b7b6564..773ee446663 100644 --- a/lib/compiler-cranelift/src/translator/mod.rs +++ b/lib/compiler-cranelift/src/translator/mod.rs @@ -7,11 +7,9 @@ mod func_translator; mod translation_utils; mod unwind; -pub use self::func_environ::{FuncEnvironment, GlobalVariable, ReturnMode, TargetEnvironment}; -pub use self::func_state::FuncTranslationState; +pub use self::func_environ::{FuncEnvironment, GlobalVariable, TargetEnvironment}; pub use self::func_translator::FuncTranslator; pub use self::translation_utils::{ - get_vmctx_value_label, irlibcall_to_libcall, irreloc_to_relocationkind, - signature_to_cranelift_ir, type_to_irtype, + irlibcall_to_libcall, irreloc_to_relocationkind, signature_to_cranelift_ir, type_to_irtype, }; pub(crate) use self::unwind::{compiled_function_unwind_info, CraneliftUnwindInfo}; diff --git a/lib/compiler/src/engine/error.rs b/lib/compiler/src/engine/error.rs index 10c5e3d440d..b5f9c0fb847 100644 --- a/lib/compiler/src/engine/error.rs +++ b/lib/compiler/src/engine/error.rs @@ -1,6 +1,6 @@ //! The WebAssembly possible errors use thiserror::Error; -pub use wasmer_types::{DeserializeError, ImportError, SerializeError}; +pub use wasmer_types::ImportError; #[cfg(not(target_arch = "wasm32"))] use wasmer_vm::Trap; diff --git a/lib/compiler/src/lib.rs b/lib/compiler/src/lib.rs index d8211b352f4..9ded8d72125 100644 --- a/lib/compiler/src/lib.rs +++ b/lib/compiler/src/lib.rs @@ -31,6 +31,7 @@ compile_error!("Both the `std` and `core` features are disabled. Please enable o #[cfg(feature = "core")] extern crate alloc; +#[allow(unused_imports)] mod lib { #[cfg(feature = "core")] pub mod std { diff --git a/lib/journal/src/concrete/mod.rs b/lib/journal/src/concrete/mod.rs index b564fa1fe81..c517635b2b7 100644 --- a/lib/journal/src/concrete/mod.rs +++ b/lib/journal/src/concrete/mod.rs @@ -24,9 +24,7 @@ pub(super) use super::*; pub use aligned_cow_str::*; pub use aligned_cow_vec::*; -pub use arc::*; pub use archived::*; -pub use boxed::*; pub use buffered::*; pub use compacting::*; #[cfg(feature = "log-file")] diff --git a/lib/virtual-fs/src/arc_box_file.rs b/lib/virtual-fs/src/arc_box_file.rs index cd6b10c204c..d518c7069ec 100644 --- a/lib/virtual-fs/src/arc_box_file.rs +++ b/lib/virtual-fs/src/arc_box_file.rs @@ -9,7 +9,6 @@ use std::{ }; use derivative::Derivative; -use futures::future::BoxFuture; use tokio::io::{AsyncRead, AsyncSeek, AsyncWrite}; use crate::VirtualFile; @@ -111,11 +110,9 @@ impl VirtualFile for ArcBoxFile { let mut inner = self.inner.lock().unwrap(); inner.set_len(new_size) } - fn unlink(&mut self) -> BoxFuture<'static, crate::Result<()>> { + fn unlink(&mut self) -> crate::Result<()> { let mut inner = self.inner.lock().unwrap(); - let fut = inner.unlink(); - drop(inner); - Box::pin(fut) + inner.unlink() } fn is_open(&self) -> bool { let inner = self.inner.lock().unwrap(); diff --git a/lib/virtual-fs/src/arc_file.rs b/lib/virtual-fs/src/arc_file.rs index 505360aa1d1..4e980e02033 100644 --- a/lib/virtual-fs/src/arc_file.rs +++ b/lib/virtual-fs/src/arc_file.rs @@ -3,7 +3,6 @@ use crate::{ClonableVirtualFile, VirtualFile}; use derivative::Derivative; -use futures::future::BoxFuture; use std::pin::Pin; use std::task::{Context, Poll}; use std::{ @@ -127,11 +126,9 @@ where let mut inner = self.inner.lock().unwrap(); inner.set_len(new_size) } - fn unlink(&mut self) -> BoxFuture<'static, crate::Result<()>> { + fn unlink(&mut self) -> crate::Result<()> { let mut inner = self.inner.lock().unwrap(); - let fut = inner.unlink(); - drop(inner); - Box::pin(fut) + inner.unlink() } fn is_open(&self) -> bool { let inner = self.inner.lock().unwrap(); diff --git a/lib/virtual-fs/src/buffer_file.rs b/lib/virtual-fs/src/buffer_file.rs index ba4881a72f5..9af66811cbf 100644 --- a/lib/virtual-fs/src/buffer_file.rs +++ b/lib/virtual-fs/src/buffer_file.rs @@ -5,7 +5,6 @@ use std::io::{self, *}; use std::pin::Pin; use std::task::{Context, Poll}; -use futures::future::BoxFuture; use tokio::io::{AsyncRead, AsyncSeek, AsyncWrite}; use crate::VirtualFile; @@ -85,8 +84,8 @@ impl VirtualFile for BufferFile { self.data.get_mut().resize(new_size as usize, 0); Ok(()) } - fn unlink(&mut self) -> BoxFuture<'static, crate::Result<()>> { - Box::pin(async { Ok(()) }) + fn unlink(&mut self) -> crate::Result<()> { + Ok(()) } fn poll_read_ready(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { let cur = self.data.stream_position().unwrap_or_default(); diff --git a/lib/virtual-fs/src/combine_file.rs b/lib/virtual-fs/src/combine_file.rs index 4880545fc84..f3db42ca58c 100644 --- a/lib/virtual-fs/src/combine_file.rs +++ b/lib/virtual-fs/src/combine_file.rs @@ -41,8 +41,8 @@ impl VirtualFile for CombineFile { self.tx.set_len(new_size) } - fn unlink(&mut self) -> BoxFuture<'static, Result<()>> { - Box::pin(self.tx.unlink()) + fn unlink(&mut self) -> Result<()> { + self.tx.unlink() } fn poll_read_ready(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { diff --git a/lib/virtual-fs/src/cow_file.rs b/lib/virtual-fs/src/cow_file.rs index 1d7e452d7ac..4030981854e 100644 --- a/lib/virtual-fs/src/cow_file.rs +++ b/lib/virtual-fs/src/cow_file.rs @@ -1,7 +1,6 @@ //! Used for /dev/zero - infinitely returns zero //! which is useful for commands like `dd if=/dev/zero of=bigfile.img size=1G` -use futures::future::BoxFuture; use replace_with::replace_with_or_abort; use std::io::{self, *}; use std::pin::Pin; @@ -205,9 +204,8 @@ impl VirtualFile for CopyOnWriteFile { fn set_len(&mut self, new_size: u64) -> crate::Result<()> { self.buf.set_len(new_size) } - fn unlink(&mut self) -> BoxFuture<'static, crate::Result<()>> { - let ret = self.buf.set_len(0); - Box::pin(async move { ret }) + fn unlink(&mut self) -> crate::Result<()> { + self.buf.set_len(0) } fn poll_read_ready(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { match self.poll_copy_progress(cx) { diff --git a/lib/virtual-fs/src/dual_write_file.rs b/lib/virtual-fs/src/dual_write_file.rs index f2c0aca0198..ef27a3f89d1 100644 --- a/lib/virtual-fs/src/dual_write_file.rs +++ b/lib/virtual-fs/src/dual_write_file.rs @@ -49,8 +49,8 @@ impl VirtualFile for DualWriteFile { self.inner.set_len(new_size) } - fn unlink(&mut self) -> BoxFuture<'static, Result<()>> { - Box::pin(self.inner.unlink()) + fn unlink(&mut self) -> Result<()> { + self.inner.unlink() } fn poll_read_ready(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { diff --git a/lib/virtual-fs/src/host_fs.rs b/lib/virtual-fs/src/host_fs.rs index 17da1152371..8bdaac3bbdd 100644 --- a/lib/virtual-fs/src/host_fs.rs +++ b/lib/virtual-fs/src/host_fs.rs @@ -442,9 +442,9 @@ impl VirtualFile for File { fs::File::set_len(&self.inner_std, new_size).map_err(Into::into) } - fn unlink(&mut self) -> BoxFuture<'static, Result<()>> { + fn unlink(&mut self) -> Result<()> { let path = self.host_path.clone(); - Box::pin(async move { fs::remove_file(&path).map_err(Into::into) }) + fs::remove_file(&path).map_err(Into::into) } fn get_special_fd(&self) -> Option { @@ -589,8 +589,8 @@ impl VirtualFile for Stdout { Ok(()) } - fn unlink(&mut self) -> BoxFuture<'static, Result<()>> { - Box::pin(async { Ok(()) }) + fn unlink(&mut self) -> Result<()> { + Ok(()) } fn get_special_fd(&self) -> Option { @@ -779,8 +779,8 @@ impl VirtualFile for Stderr { Ok(()) } - fn unlink(&mut self) -> BoxFuture<'static, Result<()>> { - Box::pin(async { Ok(()) }) + fn unlink(&mut self) -> Result<()> { + Ok(()) } fn get_special_fd(&self) -> Option { @@ -915,8 +915,8 @@ impl VirtualFile for Stdin { fn set_len(&mut self, _new_size: u64) -> crate::Result<()> { Ok(()) } - fn unlink(&mut self) -> BoxFuture<'static, Result<()>> { - Box::pin(async { Ok(()) }) + fn unlink(&mut self) -> Result<()> { + Ok(()) } fn get_special_fd(&self) -> Option { Some(0) diff --git a/lib/virtual-fs/src/lib.rs b/lib/virtual-fs/src/lib.rs index 406ab585959..7fb2343490a 100644 --- a/lib/virtual-fs/src/lib.rs +++ b/lib/virtual-fs/src/lib.rs @@ -344,7 +344,7 @@ pub trait VirtualFile: fn set_len(&mut self, new_size: u64) -> Result<()>; /// Request deletion of the file - fn unlink(&mut self) -> BoxFuture<'static, Result<()>>; + fn unlink(&mut self) -> Result<()>; /// Indicates if the file is opened or closed. This function must not block /// Defaults to a status of being constantly open diff --git a/lib/virtual-fs/src/mem_fs/file.rs b/lib/virtual-fs/src/mem_fs/file.rs index 43f51b97c1b..1a4336553f8 100644 --- a/lib/virtual-fs/src/mem_fs/file.rs +++ b/lib/virtual-fs/src/mem_fs/file.rs @@ -206,53 +206,52 @@ impl VirtualFile for FileHandle { Ok(()) } - fn unlink(&mut self) -> BoxFuture<'static, Result<()>> { + fn unlink(&mut self) -> Result<()> { let filesystem = self.filesystem.clone(); let inode = self.inode; - Box::pin(async move { - let (inode_of_parent, position, inode_of_file) = { - // Read lock. - let fs = filesystem.inner.read().map_err(|_| FsError::Lock)?; - - // The inode of the file. - let inode_of_file = inode; - - // Find the position of the file in the parent, and the - // inode of the parent. - let (position, inode_of_parent) = fs - .storage - .iter() - .find_map(|(inode_of_parent, node)| match node { - Node::Directory(DirectoryNode { children, .. }) => { - children.iter().enumerate().find_map(|(nth, inode)| { - if inode == &inode_of_file { - Some((nth, inode_of_parent)) - } else { - None - } - }) - } - _ => None, - }) - .ok_or(FsError::BaseNotDirectory)?; + let (inode_of_parent, position, inode_of_file) = { + // Read lock. + let fs = filesystem.inner.read().map_err(|_| FsError::Lock)?; + + // The inode of the file. + let inode_of_file = inode; + + // Find the position of the file in the parent, and the + // inode of the parent. + let (position, inode_of_parent) = fs + .storage + .iter() + .find_map(|(inode_of_parent, node)| match node { + Node::Directory(DirectoryNode { children, .. }) => { + children.iter().enumerate().find_map(|(nth, inode)| { + if inode == &inode_of_file { + Some((nth, inode_of_parent)) + } else { + None + } + }) + } - (inode_of_parent, position, inode_of_file) - }; + _ => None, + }) + .ok_or(FsError::BaseNotDirectory)?; - { - // Write lock. - let mut fs = filesystem.inner.write().map_err(|_| FsError::Lock)?; + (inode_of_parent, position, inode_of_file) + }; - // Remove the file from the storage. - fs.storage.remove(inode_of_file); + { + // Write lock. + let mut fs = filesystem.inner.write().map_err(|_| FsError::Lock)?; - // Remove the child from the parent directory. - fs.remove_child_from_node(inode_of_parent, position)?; - } + // Remove the file from the storage. + fs.storage.remove(inode_of_file); - Ok(()) - }) + // Remove the child from the parent directory. + fs.remove_child_from_node(inode_of_parent, position)?; + } + + Ok(()) } fn get_special_fd(&self) -> Option { @@ -608,7 +607,7 @@ mod test_virtual_file { ); } - assert_eq!(file.unlink().await, Ok(()), "unlinking the file"); + assert_eq!(file.unlink(), Ok(()), "unlinking the file"); { let fs_inner = fs.inner.read().unwrap(); diff --git a/lib/virtual-fs/src/mem_fs/stdio.rs b/lib/virtual-fs/src/mem_fs/stdio.rs index ccab27aad4c..6153994529b 100644 --- a/lib/virtual-fs/src/mem_fs/stdio.rs +++ b/lib/virtual-fs/src/mem_fs/stdio.rs @@ -45,10 +45,8 @@ macro_rules! impl_virtualfile_on_std_streams { Err(FsError::PermissionDenied) } - fn unlink(&mut self) -> futures::future::BoxFuture<'static, Result<()>> { - Box::pin(async { - Ok(()) - }) + fn unlink(&mut self) -> Result<()> { + Ok(()) } fn poll_read_ready(self: std::pin::Pin<&mut Self>, _cx: &mut std::task::Context<'_>) -> std::task::Poll> { diff --git a/lib/virtual-fs/src/null_file.rs b/lib/virtual-fs/src/null_file.rs index 2ddb156a6bb..b211314d482 100644 --- a/lib/virtual-fs/src/null_file.rs +++ b/lib/virtual-fs/src/null_file.rs @@ -5,7 +5,6 @@ use std::io::{self, *}; use std::pin::Pin; use std::task::{Context, Poll}; -use futures::future::BoxFuture; use tokio::io::{AsyncRead, AsyncSeek, AsyncWrite}; use crate::{ClonableVirtualFile, VirtualFile}; @@ -74,8 +73,8 @@ impl VirtualFile for NullFile { fn set_len(&mut self, _new_size: u64) -> crate::Result<()> { Ok(()) } - fn unlink(&mut self) -> BoxFuture<'static, crate::Result<()>> { - Box::pin(async { Ok(()) }) + fn unlink(&mut self) -> crate::Result<()> { + Ok(()) } fn poll_read_ready(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { Poll::Ready(Ok(8192)) diff --git a/lib/virtual-fs/src/overlay_fs.rs b/lib/virtual-fs/src/overlay_fs.rs index 5c7c2dfe9ba..8c16f2c76f7 100644 --- a/lib/virtual-fs/src/overlay_fs.rs +++ b/lib/virtual-fs/src/overlay_fs.rs @@ -819,27 +819,26 @@ where Ok(()) } - fn unlink(&mut self) -> BoxFuture<'static, crate::Result<()>> { + fn unlink(&mut self) -> crate::Result<()> { let primary = self.primary.clone(); let path = self.path.clone(); - Box::pin(async move { - // Create the whiteout file in the primary - let mut had_at_least_one_success = false; - if ops::create_white_out(&primary, &path).is_ok() { - had_at_least_one_success = true; - } - // Attempt to remove it from the primary first - match primary.remove_file(&path) { - Err(e) if should_continue(e) => {} - other => return other, - } + // Create the whiteout file in the primary + let mut had_at_least_one_success = false; + if ops::create_white_out(&primary, &path).is_ok() { + had_at_least_one_success = true; + } - if had_at_least_one_success { - return Ok(()); - } - Err(FsError::PermissionDenied) - }) + // Attempt to remove it from the primary first + match primary.remove_file(&path) { + Err(e) if should_continue(e) => {} + other => return other, + } + + if had_at_least_one_success { + return Ok(()); + } + Err(FsError::PermissionDenied) } fn poll_read_ready( diff --git a/lib/virtual-fs/src/pipe.rs b/lib/virtual-fs/src/pipe.rs index b36665af265..f88d1489c8e 100644 --- a/lib/virtual-fs/src/pipe.rs +++ b/lib/virtual-fs/src/pipe.rs @@ -1,5 +1,4 @@ use bytes::{Buf, Bytes}; -use futures::future::BoxFuture; #[cfg(feature = "futures")] use futures::Future; use std::io::IoSlice; @@ -395,8 +394,8 @@ impl VirtualFile for Pipe { } /// Request deletion of the file - fn unlink(&mut self) -> BoxFuture<'static, Result<(), FsError>> { - Box::pin(async { Ok(()) }) + fn unlink(&mut self) -> Result<(), FsError> { + Ok(()) } /// Indicates if the file is opened or closed. This function must not block diff --git a/lib/virtual-fs/src/random_file.rs b/lib/virtual-fs/src/random_file.rs index 98db4d128cc..5722859ad00 100644 --- a/lib/virtual-fs/src/random_file.rs +++ b/lib/virtual-fs/src/random_file.rs @@ -5,7 +5,6 @@ use std::io::{self, *}; use std::pin::Pin; use std::task::{Context, Poll}; -use futures::future::BoxFuture; use tokio::io::{AsyncRead, AsyncSeek, AsyncWrite}; use crate::VirtualFile; @@ -77,8 +76,8 @@ impl VirtualFile for RandomFile { fn set_len(&mut self, _new_size: u64) -> crate::Result<()> { Ok(()) } - fn unlink(&mut self) -> BoxFuture<'static, crate::Result<()>> { - Box::pin(async { Ok(()) }) + fn unlink(&mut self) -> crate::Result<()> { + Ok(()) } fn poll_read_ready(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { Poll::Ready(Ok(0)) diff --git a/lib/virtual-fs/src/special_file.rs b/lib/virtual-fs/src/special_file.rs index 079974e1873..a726e464f91 100644 --- a/lib/virtual-fs/src/special_file.rs +++ b/lib/virtual-fs/src/special_file.rs @@ -6,7 +6,6 @@ use std::pin::Pin; use std::task::{Context, Poll}; use crate::VirtualFile; -use futures::future::BoxFuture; use tokio::io::{AsyncRead, AsyncSeek, AsyncWrite}; pub type Fd = u32; @@ -94,8 +93,8 @@ impl VirtualFile for DeviceFile { fn set_len(&mut self, _new_size: u64) -> crate::Result<()> { Ok(()) } - fn unlink(&mut self) -> BoxFuture<'static, crate::Result<()>> { - Box::pin(async { Ok(()) }) + fn unlink(&mut self) -> crate::Result<()> { + Ok(()) } fn get_special_fd(&self) -> Option { Some(self.fd) diff --git a/lib/virtual-fs/src/static_file.rs b/lib/virtual-fs/src/static_file.rs index 636c00b1e52..b37ef2cb1a5 100644 --- a/lib/virtual-fs/src/static_file.rs +++ b/lib/virtual-fs/src/static_file.rs @@ -5,7 +5,6 @@ use std::{ task::{Context, Poll}, }; -use futures::future::BoxFuture; use shared_buffer::OwnedBuffer; use tokio::io::{AsyncRead, AsyncSeek, AsyncWrite}; @@ -48,8 +47,8 @@ impl VirtualFile for StaticFile { Err(FsError::PermissionDenied) } - fn unlink(&mut self) -> BoxFuture<'static, Result<(), FsError>> { - Box::pin(async { Err(FsError::PermissionDenied) }) + fn unlink(&mut self) -> Result<(), FsError> { + Err(FsError::PermissionDenied) } fn poll_read_ready(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { diff --git a/lib/virtual-fs/src/static_fs.rs b/lib/virtual-fs/src/static_fs.rs index e18da882ce0..767741ec743 100644 --- a/lib/virtual-fs/src/static_fs.rs +++ b/lib/virtual-fs/src/static_fs.rs @@ -117,8 +117,8 @@ impl VirtualFile for WebCFile { fn set_len(&mut self, _new_size: u64) -> crate::Result<()> { Ok(()) } - fn unlink(&mut self) -> BoxFuture<'static, Result<(), FsError>> { - Box::pin(async { Ok(()) }) + fn unlink(&mut self) -> Result<(), FsError> { + Ok(()) } fn poll_read_ready(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { let remaining = self.entry.get_len() - self.cursor; diff --git a/lib/virtual-fs/src/trace_fs.rs b/lib/virtual-fs/src/trace_fs.rs index 53db3db90b6..461b1cbf4fe 100644 --- a/lib/virtual-fs/src/trace_fs.rs +++ b/lib/virtual-fs/src/trace_fs.rs @@ -129,8 +129,8 @@ impl VirtualFile for TraceFile { self.file.set_len(new_size) } - fn unlink(&mut self) -> BoxFuture<'static, crate::Result<()>> { - Box::pin(self.file.unlink()) + fn unlink(&mut self) -> crate::Result<()> { + self.file.unlink() } #[tracing::instrument(level = "trace", skip_all, fields(path=%self.path.display()))] diff --git a/lib/virtual-fs/src/union_fs.rs b/lib/virtual-fs/src/union_fs.rs index 04b6d8eea46..635a92c62bc 100644 --- a/lib/virtual-fs/src/union_fs.rs +++ b/lib/virtual-fs/src/union_fs.rs @@ -440,7 +440,7 @@ impl FileOpener for UnionFileSystem { .open(path) { if conf.create_new() { - ret.unlink(); + ret.unlink().ok(); continue; } return Ok(ret); diff --git a/lib/virtual-fs/src/webc_fs.rs b/lib/virtual-fs/src/webc_fs.rs index 0a67c739bfa..ba521564fc5 100644 --- a/lib/virtual-fs/src/webc_fs.rs +++ b/lib/virtual-fs/src/webc_fs.rs @@ -164,8 +164,8 @@ where fn set_len(&mut self, _new_size: u64) -> crate::Result<()> { Ok(()) } - fn unlink(&mut self) -> BoxFuture<'static, Result<(), FsError>> { - Box::pin(async { Ok(()) }) + fn unlink(&mut self) -> Result<(), FsError> { + Ok(()) } fn poll_read_ready(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { let remaining = self.entry.get_len() - self.cursor; diff --git a/lib/virtual-fs/src/webc_volume_fs.rs b/lib/virtual-fs/src/webc_volume_fs.rs index 56d0a43907f..e185ec03e97 100644 --- a/lib/virtual-fs/src/webc_volume_fs.rs +++ b/lib/virtual-fs/src/webc_volume_fs.rs @@ -207,8 +207,8 @@ impl VirtualFile for File { Err(FsError::PermissionDenied) } - fn unlink(&mut self) -> BoxFuture<'static, crate::Result<()>> { - Box::pin(async { Err(FsError::PermissionDenied) }) + fn unlink(&mut self) -> crate::Result<()> { + Err(FsError::PermissionDenied) } fn poll_read_ready( diff --git a/lib/virtual-fs/src/zero_file.rs b/lib/virtual-fs/src/zero_file.rs index e28ff98ffd5..297a5fa30ea 100644 --- a/lib/virtual-fs/src/zero_file.rs +++ b/lib/virtual-fs/src/zero_file.rs @@ -8,7 +8,6 @@ use std::{ task::{Context, Poll}, }; -use futures::future::BoxFuture; use tokio::io::{AsyncRead, AsyncSeek, AsyncWrite}; use crate::VirtualFile; @@ -79,8 +78,8 @@ impl VirtualFile for ZeroFile { fn set_len(&mut self, _new_size: u64) -> crate::Result<()> { Ok(()) } - fn unlink(&mut self) -> BoxFuture<'static, crate::Result<()>> { - Box::pin(async { Ok(()) }) + fn unlink(&mut self) -> crate::Result<()> { + Ok(()) } fn poll_read_ready(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { Poll::Ready(Ok(0)) diff --git a/lib/wasix/src/fs/inode_guard.rs b/lib/wasix/src/fs/inode_guard.rs index 9d68f814f19..c944b9d0700 100644 --- a/lib/wasix/src/fs/inode_guard.rs +++ b/lib/wasix/src/fs/inode_guard.rs @@ -7,7 +7,6 @@ use std::{ task::{Context, Poll}, }; -use futures::future::BoxFuture; use tokio::io::{AsyncRead, AsyncSeek, AsyncWrite}; use virtual_fs::{FsError, Pipe as VirtualPipe, VirtualFile}; use wasmer_wasix_types::{ @@ -529,19 +528,13 @@ impl VirtualFile for WasiStateFileGuard { } } - fn unlink(&mut self) -> BoxFuture<'static, Result<(), FsError>> { + fn unlink(&mut self) -> Result<(), FsError> { let mut guard = self.lock_write(); - let fut = if let Some(file) = guard.as_mut() { - Ok(file.unlink()) + if let Some(file) = guard.as_mut() { + file.unlink() } else { Err(FsError::IOError) - }; - Box::pin(async move { - match fut { - Ok(fut) => fut.await, - Err(err) => Err(err), - } - }) + } } fn is_open(&self) -> bool { diff --git a/lib/wasix/src/os/command/builtins/cmd_wasmer.rs b/lib/wasix/src/os/command/builtins/cmd_wasmer.rs index 90dbf644022..c0a0536907d 100644 --- a/lib/wasix/src/os/command/builtins/cmd_wasmer.rs +++ b/lib/wasix/src/os/command/builtins/cmd_wasmer.rs @@ -40,7 +40,7 @@ pub struct CmdWasmer { } impl CmdWasmer { - const NAME: &str = "wasmer"; + const NAME: &'static str = "wasmer"; pub fn new(runtime: Arc) -> Self { Self { runtime } diff --git a/lib/wasix/src/runners/wasi.rs b/lib/wasix/src/runners/wasi.rs index c36b95cbb65..aebb6dafdb5 100644 --- a/lib/wasix/src/runners/wasi.rs +++ b/lib/wasix/src/runners/wasi.rs @@ -218,7 +218,7 @@ impl WasiRunner { } #[tracing::instrument(level = "debug", skip_all)] - pub(crate) fn prepare_webc_env( + pub fn prepare_webc_env( &self, program_name: &str, wasi: &Wasi, diff --git a/lib/wasix/src/runtime/resolver/wapm_source.rs b/lib/wasix/src/runtime/resolver/wapm_source.rs index e432f2ef864..4d81c901634 100644 --- a/lib/wasix/src/runtime/resolver/wapm_source.rs +++ b/lib/wasix/src/runtime/resolver/wapm_source.rs @@ -29,8 +29,8 @@ pub struct WapmSource { } impl WapmSource { - pub const WASMER_DEV_ENDPOINT: &str = "https://registry.wasmer.wtf/graphql"; - pub const WASMER_PROD_ENDPOINT: &str = "https://registry.wasmer.io/graphql"; + pub const WASMER_DEV_ENDPOINT: &'static str = "https://registry.wasmer.wtf/graphql"; + pub const WASMER_PROD_ENDPOINT: &'static str = "https://registry.wasmer.io/graphql"; pub fn new(registry_endpoint: Url, client: Arc) -> Self { WapmSource { diff --git a/lib/wasix/src/state/env.rs b/lib/wasix/src/state/env.rs index ce69a63d974..d3121b1fa21 100644 --- a/lib/wasix/src/state/env.rs +++ b/lib/wasix/src/state/env.rs @@ -1098,7 +1098,12 @@ impl WasiEnv { } WasiFsRoot::Backing(fs) => { let mut f = fs.new_open_options().create(true).write(true).open(path)?; - f.copy_reference(Box::new(StaticFile::new(atom))); + if let Err(e) = InlineWaker::block_on(f.copy_reference(Box::new(StaticFile::new(atom)))) { + tracing::warn!( + error = &e as &dyn std::error::Error, + "Unable to copy file reference", + ); + } } } diff --git a/lib/wasix/src/syscalls/wasi/path_unlink_file.rs b/lib/wasix/src/syscalls/wasi/path_unlink_file.rs index a0f4d15ac83..c79a5812c37 100644 --- a/lib/wasix/src/syscalls/wasi/path_unlink_file.rs +++ b/lib/wasix/src/syscalls/wasi/path_unlink_file.rs @@ -97,12 +97,7 @@ pub(crate) fn path_unlink_file_internal( Kind::File { handle, path, .. } => { if let Some(h) = handle { let mut h = h.write().unwrap(); - let state = state; - let fut = h.unlink(); - drop(h); - wasi_try_ok!(__asyncify_light(env, None, async move { - fut.await.map_err(fs_error_into_wasi_err) - })?) + wasi_try_ok!(h.unlink().map_err(fs_error_into_wasi_err)); } else { // File is closed // problem with the abstraction, we can't call unlink because there's no handle diff --git a/tests/lib/wast/src/wasi_wast.rs b/tests/lib/wast/src/wasi_wast.rs index 806209dbb68..ccf8fe7f2ab 100644 --- a/tests/lib/wast/src/wasi_wast.rs +++ b/tests/lib/wast/src/wasi_wast.rs @@ -653,7 +653,7 @@ impl VirtualFile for OutputCapturerer { Ok(()) } fn unlink(&mut self) -> BoxFuture<'static, Result<(), FsError>> { - Box::pin(async { Ok(()) }) + Ok(()) } fn poll_read_ready(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { Poll::Ready(Ok(0)) From 104cf9c156ecb803a485075b08f997a22a6ce043 Mon Sep 17 00:00:00 2001 From: Johnathan Sharratt Date: Wed, 3 Apr 2024 11:09:31 +1100 Subject: [PATCH 2/5] Linting fix --- lib/wasix/src/state/env.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/wasix/src/state/env.rs b/lib/wasix/src/state/env.rs index d3121b1fa21..6f7237e2c1f 100644 --- a/lib/wasix/src/state/env.rs +++ b/lib/wasix/src/state/env.rs @@ -1098,7 +1098,9 @@ impl WasiEnv { } WasiFsRoot::Backing(fs) => { let mut f = fs.new_open_options().create(true).write(true).open(path)?; - if let Err(e) = InlineWaker::block_on(f.copy_reference(Box::new(StaticFile::new(atom)))) { + if let Err(e) = + InlineWaker::block_on(f.copy_reference(Box::new(StaticFile::new(atom)))) + { tracing::warn!( error = &e as &dyn std::error::Error, "Unable to copy file reference", From 084012b746c6bd8d5b851051d377cef02546b9a5 Mon Sep 17 00:00:00 2001 From: Johnathan Sharratt Date: Wed, 3 Apr 2024 11:12:00 +1100 Subject: [PATCH 3/5] CVE fix --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1503414fe24..bd567777cc6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1986,9 +1986,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.25" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fbd2820c5e49886948654ab546d0688ff24530286bdcf8fca3cefb16d4618eb" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ "bytes 1.5.0", "fnv", @@ -2207,7 +2207,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.6", + "socket2 0.4.10", "tokio 1.36.0", "tower-service", "tracing", @@ -5538,7 +5538,7 @@ version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 0.1.10", "static_assertions", ] From 999109c006ea0ed9d977fcc1423bffac9fe975ff Mon Sep 17 00:00:00 2001 From: Johnathan Sharratt Date: Wed, 3 Apr 2024 13:44:27 +1100 Subject: [PATCH 4/5] Minor leftover fixes --- lib/registry/src/config.rs | 4 ++-- lib/virtual-fs/src/host_fs.rs | 3 +-- tests/lib/wast/src/wasi_wast.rs | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/registry/src/config.rs b/lib/registry/src/config.rs index 05b4ef0d968..4eb49b5bb2b 100644 --- a/lib/registry/src/config.rs +++ b/lib/registry/src/config.rs @@ -179,8 +179,8 @@ impl MultiRegistry { } impl WasmerConfig { - pub(crate) const ENV_VAR_WASMER_REGISTRY_TOKEN: &str = "WASMER_TOKEN"; - pub(crate) const ENV_VAR_WASMER_REGISTRY_TOKEN_LEGACY: &str = "WAPM_REGISTRY_TOKEN"; + pub(crate) const ENV_VAR_WASMER_REGISTRY_TOKEN: &'static str = "WASMER_TOKEN"; + pub(crate) const ENV_VAR_WASMER_REGISTRY_TOKEN_LEGACY: &'static str = "WAPM_REGISTRY_TOKEN"; /// Save the config to a file pub fn save>(&self, to: P) -> anyhow::Result<()> { diff --git a/lib/virtual-fs/src/host_fs.rs b/lib/virtual-fs/src/host_fs.rs index 8bdaac3bbdd..bac84f944b0 100644 --- a/lib/virtual-fs/src/host_fs.rs +++ b/lib/virtual-fs/src/host_fs.rs @@ -443,8 +443,7 @@ impl VirtualFile for File { } fn unlink(&mut self) -> Result<()> { - let path = self.host_path.clone(); - fs::remove_file(&path).map_err(Into::into) + fs::remove_file(&self.host_path).map_err(Into::into) } fn get_special_fd(&self) -> Option { diff --git a/tests/lib/wast/src/wasi_wast.rs b/tests/lib/wast/src/wasi_wast.rs index ccf8fe7f2ab..51d101674a9 100644 --- a/tests/lib/wast/src/wasi_wast.rs +++ b/tests/lib/wast/src/wasi_wast.rs @@ -652,7 +652,7 @@ impl VirtualFile for OutputCapturerer { fn set_len(&mut self, _new_size: Filesize) -> Result<(), FsError> { Ok(()) } - fn unlink(&mut self) -> BoxFuture<'static, Result<(), FsError>> { + fn unlink(&mut self) -> Result<(), FsError> { Ok(()) } fn poll_read_ready(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { From e453cde1f9d5463309acd2ea9f78e2d9070ae1a9 Mon Sep 17 00:00:00 2001 From: Johnathan Sharratt Date: Wed, 3 Apr 2024 17:53:31 +1100 Subject: [PATCH 5/5] Lint fix --- tests/lib/wast/src/wasi_wast.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/lib/wast/src/wasi_wast.rs b/tests/lib/wast/src/wasi_wast.rs index 51d101674a9..5dc1e7ffbd1 100644 --- a/tests/lib/wast/src/wasi_wast.rs +++ b/tests/lib/wast/src/wasi_wast.rs @@ -8,7 +8,6 @@ use std::{ task::{Context, Poll}, }; -use futures::future::BoxFuture; use virtual_fs::{ host_fs, mem_fs, passthru_fs, tmp_fs, union_fs, AsyncRead, AsyncSeek, AsyncWrite, AsyncWriteExt, FileSystem, Pipe, ReadBuf, RootFileSystemBuilder,