diff --git a/crates/wasi-common/src/entry.rs b/crates/wasi-common/src/entry.rs index a162b19f42..a8a5accaf0 100644 --- a/crates/wasi-common/src/entry.rs +++ b/crates/wasi-common/src/entry.rs @@ -78,7 +78,7 @@ impl Entry { /// `HandleRights` structure is a subset of rights attached to this `Entry`. The check is /// performed using `Entry::validate_rights` method. If the check fails, `Error::Notcapable` /// is returned. - pub(crate) fn as_handle(&self, rights: &HandleRights) -> Result { + pub(crate) fn as_handle(&self, rights: HandleRights) -> Result { self.validate_rights(rights)?; Ok(self.handle.get()) } @@ -87,7 +87,7 @@ impl Entry { /// rights attached to this `Entry` object are a superset. /// /// Upon unsuccessful check, `Error::Notcapable` is returned. - pub(crate) fn validate_rights(&self, rights: &HandleRights) -> Result<()> { + pub(crate) fn validate_rights(&self, rights: HandleRights) -> Result<()> { let this_rights = self.handle.get_rights(); if this_rights.contains(rights) { Ok(()) diff --git a/crates/wasi-common/src/handle.rs b/crates/wasi-common/src/handle.rs index ccb549703c..9bef53eacc 100644 --- a/crates/wasi-common/src/handle.rs +++ b/crates/wasi-common/src/handle.rs @@ -39,8 +39,8 @@ impl HandleRights { } /// Checks if `other` is a subset of those rights. - pub fn contains(&self, other: &Self) -> bool { - self.base.contains(&other.base) && self.inheriting.contains(&other.inheriting) + pub fn contains(&self, other: Self) -> bool { + self.base.contains(other.base) && self.inheriting.contains(other.inheriting) } /// Returns base rights. @@ -100,7 +100,7 @@ pub trait Handle { let file_type = self.get_file_type(); let rights = self.get_rights(); let required_rights = HandleRights::from_base(Rights::FD_SEEK | Rights::FD_TELL); - file_type == Filetype::CharacterDevice && rights.contains(&required_rights) + file_type == Filetype::CharacterDevice && rights.contains(required_rights) } // TODO perhaps should be a separate trait? // FdOps diff --git a/crates/wasi-common/src/path.rs b/crates/wasi-common/src/path.rs index b2e4b19ba0..df04e48f41 100644 --- a/crates/wasi-common/src/path.rs +++ b/crates/wasi-common/src/path.rs @@ -11,7 +11,7 @@ pub(crate) use crate::sys::path::{from_host, open_rights}; /// This is a workaround for not having Capsicum support in the OS. pub(crate) fn get( entry: &Entry, - required_rights: &HandleRights, + required_rights: HandleRights, dirflags: Lookupflags, path: &str, needs_final_component: bool, @@ -140,7 +140,7 @@ pub(crate) fn get( } continue; - } else if ends_with_slash || dirflags.contains(&Lookupflags::SYMLINK_FOLLOW) + } else if ends_with_slash || dirflags.contains(Lookupflags::SYMLINK_FOLLOW) { // if there's a trailing slash, or if `LOOKUP_SYMLINK_FOLLOW` is set, attempt // symlink expansion diff --git a/crates/wasi-common/src/snapshots/wasi_snapshot_preview1.rs b/crates/wasi-common/src/snapshots/wasi_snapshot_preview1.rs index 8bb41a903a..794be79c9f 100644 --- a/crates/wasi-common/src/snapshots/wasi_snapshot_preview1.rs +++ b/crates/wasi-common/src/snapshots/wasi_snapshot_preview1.rs @@ -60,7 +60,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let required_rights = HandleRights::from_base(types::Rights::FD_ADVISE); let entry = self.get_entry(fd)?; entry - .as_handle(&required_rights)? + .as_handle(required_rights)? .advise(advice, offset, len) } @@ -72,7 +72,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { ) -> Result<()> { let required_rights = HandleRights::from_base(types::Rights::FD_ALLOCATE); let entry = self.get_entry(fd)?; - entry.as_handle(&required_rights)?.allocate(offset, len) + entry.as_handle(required_rights)?.allocate(offset, len) } fn fd_close(&self, fd: types::Fd) -> Result<()> { @@ -89,12 +89,12 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { fn fd_datasync(&self, fd: types::Fd) -> Result<()> { let required_rights = HandleRights::from_base(types::Rights::FD_DATASYNC); let entry = self.get_entry(fd)?; - entry.as_handle(&required_rights)?.datasync() + entry.as_handle(required_rights)?.datasync() } fn fd_fdstat_get(&self, fd: types::Fd) -> Result { let entry = self.get_entry(fd)?; - let file = entry.as_handle(&HandleRights::empty())?; + let file = entry.as_handle(HandleRights::empty())?; let fs_flags = file.fdstat_get()?; let rights = entry.get_rights(); let fdstat = types::Fdstat { @@ -109,7 +109,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { fn fd_fdstat_set_flags(&self, fd: types::Fd, flags: types::Fdflags) -> Result<()> { let required_rights = HandleRights::from_base(types::Rights::FD_FDSTAT_SET_FLAGS); let entry = self.get_entry(fd)?; - entry.as_handle(&required_rights)?.fdstat_set_flags(flags) + entry.as_handle(required_rights)?.fdstat_set_flags(flags) } fn fd_fdstat_set_rights( @@ -120,7 +120,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { ) -> Result<()> { let rights = HandleRights::new(fs_rights_base, fs_rights_inheriting); let entry = self.get_entry(fd)?; - if !entry.get_rights().contains(&rights) { + if !entry.get_rights().contains(rights) { return Err(Error::Notcapable); } entry.set_rights(rights); @@ -130,14 +130,14 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { fn fd_filestat_get(&self, fd: types::Fd) -> Result { let required_rights = HandleRights::from_base(types::Rights::FD_FILESTAT_GET); let entry = self.get_entry(fd)?; - let host_filestat = entry.as_handle(&required_rights)?.filestat_get()?; + let host_filestat = entry.as_handle(required_rights)?.filestat_get()?; Ok(host_filestat) } fn fd_filestat_set_size(&self, fd: types::Fd, size: types::Filesize) -> Result<()> { let required_rights = HandleRights::from_base(types::Rights::FD_FILESTAT_SET_SIZE); let entry = self.get_entry(fd)?; - entry.as_handle(&required_rights)?.filestat_set_size(size) + entry.as_handle(required_rights)?.filestat_set_size(size) } fn fd_filestat_set_times( @@ -150,7 +150,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let required_rights = HandleRights::from_base(types::Rights::FD_FILESTAT_SET_TIMES); let entry = self.get_entry(fd)?; entry - .as_handle(&required_rights)? + .as_handle(required_rights)? .filestat_set_times(atim, mtim, fst_flags) } @@ -180,7 +180,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { .map(|s| io::IoSliceMut::new(&mut *s)) .collect::>>(); entry - .as_handle(&required_rights)? + .as_handle(required_rights)? .preadv(&mut buf, offset)? .try_into()? }; @@ -255,7 +255,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let buf: Vec = guest_slices.iter().map(|s| io::IoSlice::new(&*s)).collect(); entry - .as_handle(&required_rights)? + .as_handle(required_rights)? .pwritev(&buf, offset)? .try_into()? }; @@ -278,7 +278,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { .map(|s| io::IoSliceMut::new(&mut *s)) .collect(); entry - .as_handle(&required_rights)? + .as_handle(required_rights)? .read_vectored(&mut slices)? .try_into()? }; @@ -298,7 +298,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let mut bufused = 0; let mut buf = buf.clone(); - for pair in entry.as_handle(&required_rights)?.readdir(cookie)? { + for pair in entry.as_handle(required_rights)?.readdir(cookie)? { let (dirent, name) = pair?; let dirent_raw = dirent.as_bytes()?; let dirent_len: types::Size = dirent_raw.len().try_into()?; @@ -379,21 +379,21 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { types::Whence::End => SeekFrom::End(offset), types::Whence::Set => SeekFrom::Start(offset as u64), }; - let host_newoffset = entry.as_handle(&required_rights)?.seek(pos)?; + let host_newoffset = entry.as_handle(required_rights)?.seek(pos)?; Ok(host_newoffset) } fn fd_sync(&self, fd: types::Fd) -> Result<()> { let required_rights = HandleRights::from_base(types::Rights::FD_SYNC); let entry = self.get_entry(fd)?; - entry.as_handle(&required_rights)?.sync() + entry.as_handle(required_rights)?.sync() } fn fd_tell(&self, fd: types::Fd) -> Result { let required_rights = HandleRights::from_base(types::Rights::FD_TELL); let entry = self.get_entry(fd)?; let host_offset = entry - .as_handle(&required_rights)? + .as_handle(required_rights)? .seek(SeekFrom::Current(0))?; Ok(host_offset) } @@ -411,7 +411,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let slices: Vec = guest_slices.iter().map(|s| io::IoSlice::new(&*s)).collect(); entry - .as_handle(&required_rights)? + .as_handle(required_rights)? .write_vectored(&slices)? .try_into()? }; @@ -426,7 +426,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let path = path.as_str()?; let (dirfd, path) = path::get( &entry, - &required_rights, + required_rights, types::Lookupflags::empty(), path.deref(), false, @@ -443,9 +443,9 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let required_rights = HandleRights::from_base(types::Rights::PATH_FILESTAT_GET); let entry = self.get_entry(dirfd)?; let path = path.as_str()?; - let (dirfd, path) = path::get(&entry, &required_rights, flags, path.deref(), false)?; + let (dirfd, path) = path::get(&entry, required_rights, flags, path.deref(), false)?; let host_filestat = - dirfd.filestat_get_at(&path, flags.contains(&types::Lookupflags::SYMLINK_FOLLOW))?; + dirfd.filestat_get_at(&path, flags.contains(types::Lookupflags::SYMLINK_FOLLOW))?; Ok(host_filestat) } @@ -461,13 +461,13 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let required_rights = HandleRights::from_base(types::Rights::PATH_FILESTAT_SET_TIMES); let entry = self.get_entry(dirfd)?; let path = path.as_str()?; - let (dirfd, path) = path::get(&entry, &required_rights, flags, path.deref(), false)?; + let (dirfd, path) = path::get(&entry, required_rights, flags, path.deref(), false)?; dirfd.filestat_set_times_at( &path, atim, mtim, fst_flags, - flags.contains(&types::Lookupflags::SYMLINK_FOLLOW), + flags.contains(types::Lookupflags::SYMLINK_FOLLOW), )?; Ok(()) } @@ -487,7 +487,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let old_path = old_path.as_str()?; path::get( &old_entry, - &required_rights, + required_rights, types::Lookupflags::empty(), old_path.deref(), false, @@ -500,7 +500,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let new_path = new_path.as_str()?; path::get( &new_entry, - &required_rights, + required_rights, types::Lookupflags::empty(), new_path.deref(), false, @@ -510,7 +510,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { &old_path, new_dirfd, &new_path, - old_flags.contains(&types::Lookupflags::SYMLINK_FOLLOW), + old_flags.contains(types::Lookupflags::SYMLINK_FOLLOW), ) } @@ -535,7 +535,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let path = path.as_str()?; path::get( &entry, - &needed_rights, + needed_rights, dirflags, path.deref(), oflags & types::Oflags::CREAT != types::Oflags::empty(), @@ -581,7 +581,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let path = path.as_str()?; path::get( &entry, - &required_rights, + required_rights, types::Lookupflags::empty(), path.deref(), false, @@ -599,7 +599,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let path = path.as_str()?; path::get( &entry, - &required_rights, + required_rights, types::Lookupflags::empty(), path.deref(), true, @@ -621,7 +621,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let old_path = old_path.as_str()?; path::get( &entry, - &required_rights, + required_rights, types::Lookupflags::empty(), old_path.deref(), true, @@ -633,7 +633,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let new_path = new_path.as_str()?; path::get( &entry, - &required_rights, + required_rights, types::Lookupflags::empty(), new_path.deref(), true, @@ -654,7 +654,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let new_path = new_path.as_str()?; path::get( &entry, - &required_rights, + required_rights, types::Lookupflags::empty(), new_path.deref(), true, @@ -672,7 +672,7 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx { let path = path.as_str()?; path::get( &entry, - &required_rights, + required_rights, types::Lookupflags::empty(), path.deref(), false, @@ -815,7 +815,7 @@ impl WasiCtx { } }; fd_events.push(sched::FdEventData { - handle: entry.as_handle(&required_rights)?, + handle: entry.as_handle(required_rights)?, r#type: types::Eventtype::FdRead, userdata: subscription.userdata, }); @@ -841,7 +841,7 @@ impl WasiCtx { } }; fd_events.push(sched::FdEventData { - handle: entry.as_handle(&required_rights)?, + handle: entry.as_handle(required_rights)?, r#type: types::Eventtype::FdWrite, userdata: subscription.userdata, }); diff --git a/crates/wasi-common/src/sys/fd.rs b/crates/wasi-common/src/sys/fd.rs index 8603c22a67..bcee2956bc 100644 --- a/crates/wasi-common/src/sys/fd.rs +++ b/crates/wasi-common/src/sys/fd.rs @@ -12,10 +12,10 @@ pub(crate) fn filestat_set_times( st_mtim: Timestamp, fst_flags: Fstflags, ) -> Result<()> { - let set_atim = fst_flags.contains(&Fstflags::ATIM); - let set_atim_now = fst_flags.contains(&Fstflags::ATIM_NOW); - let set_mtim = fst_flags.contains(&Fstflags::MTIM); - let set_mtim_now = fst_flags.contains(&Fstflags::MTIM_NOW); + let set_atim = fst_flags.contains(Fstflags::ATIM); + let set_atim_now = fst_flags.contains(Fstflags::ATIM_NOW); + let set_mtim = fst_flags.contains(Fstflags::MTIM); + let set_mtim_now = fst_flags.contains(Fstflags::MTIM_NOW); if (set_atim && set_atim_now) || (set_mtim && set_mtim_now) { return Err(Error::Inval); diff --git a/crates/wasi-common/src/sys/unix/mod.rs b/crates/wasi-common/src/sys/unix/mod.rs index 84d8ec581e..9c7fd5ece8 100644 --- a/crates/wasi-common/src/sys/unix/mod.rs +++ b/crates/wasi-common/src/sys/unix/mod.rs @@ -147,19 +147,19 @@ impl From for ClockId { impl From for OFlags { fn from(fdflags: Fdflags) -> Self { let mut nix_flags = Self::empty(); - if fdflags.contains(&Fdflags::APPEND) { + if fdflags.contains(Fdflags::APPEND) { nix_flags.insert(Self::APPEND); } - if fdflags.contains(&Fdflags::DSYNC) { + if fdflags.contains(Fdflags::DSYNC) { nix_flags.insert(Self::DSYNC); } - if fdflags.contains(&Fdflags::NONBLOCK) { + if fdflags.contains(Fdflags::NONBLOCK) { nix_flags.insert(Self::NONBLOCK); } - if fdflags.contains(&Fdflags::RSYNC) { + if fdflags.contains(Fdflags::RSYNC) { nix_flags.insert(O_RSYNC); } - if fdflags.contains(&Fdflags::SYNC) { + if fdflags.contains(Fdflags::SYNC) { nix_flags.insert(Self::SYNC); } nix_flags @@ -191,16 +191,16 @@ impl From for Fdflags { impl From for OFlags { fn from(oflags: Oflags) -> Self { let mut nix_flags = Self::empty(); - if oflags.contains(&Oflags::CREAT) { + if oflags.contains(Oflags::CREAT) { nix_flags.insert(Self::CREAT); } - if oflags.contains(&Oflags::DIRECTORY) { + if oflags.contains(Oflags::DIRECTORY) { nix_flags.insert(Self::DIRECTORY); } - if oflags.contains(&Oflags::EXCL) { + if oflags.contains(Oflags::EXCL) { nix_flags.insert(Self::EXCL); } - if oflags.contains(&Oflags::TRUNC) { + if oflags.contains(Oflags::TRUNC) { nix_flags.insert(Self::TRUNC); } nix_flags diff --git a/crates/wasi-common/src/sys/unix/path.rs b/crates/wasi-common/src/sys/unix/path.rs index bbe084d32b..d952790eeb 100644 --- a/crates/wasi-common/src/sys/unix/path.rs +++ b/crates/wasi-common/src/sys/unix/path.rs @@ -239,10 +239,10 @@ pub(crate) fn filestat_set_times_at( use std::time::{Duration, UNIX_EPOCH}; use yanix::filetime::*; - let set_atim = fst_flags.contains(&Fstflags::ATIM); - let set_atim_now = fst_flags.contains(&Fstflags::ATIM_NOW); - let set_mtim = fst_flags.contains(&Fstflags::MTIM); - let set_mtim_now = fst_flags.contains(&Fstflags::MTIM_NOW); + let set_atim = fst_flags.contains(Fstflags::ATIM); + let set_atim_now = fst_flags.contains(Fstflags::ATIM_NOW); + let set_mtim = fst_flags.contains(Fstflags::MTIM); + let set_mtim_now = fst_flags.contains(Fstflags::MTIM_NOW); if (set_atim && set_atim_now) || (set_mtim && set_mtim_now) { return Err(Error::Inval); diff --git a/crates/wasi-common/src/virtfs.rs b/crates/wasi-common/src/virtfs.rs index dae91de485..a219cff719 100644 --- a/crates/wasi-common/src/virtfs.rs +++ b/crates/wasi-common/src/virtfs.rs @@ -299,7 +299,7 @@ impl Handle for InMemoryFile { trace!("write_vectored(iovs={:?})", iovs); let mut data = self.data.borrow_mut(); - let append_mode = self.fd_flags.get().contains(&Fdflags::APPEND); + let append_mode = self.fd_flags.get().contains(Fdflags::APPEND); trace!(" | fd_flags={}", self.fd_flags.get()); // If this file is in append mode, we write to the end. @@ -353,7 +353,7 @@ impl Handle for InMemoryFile { oflags: Oflags, _fd_flags: Fdflags, ) -> Result> { - if oflags.contains(&Oflags::DIRECTORY) { + if oflags.contains(Oflags::DIRECTORY) { tracing::trace!( "InMemoryFile::openat was passed oflags DIRECTORY, but {:?} is a file.", path @@ -652,7 +652,7 @@ impl Handle for VirtualDir { return Err(Error::Exist); } - if oflags.contains(&Oflags::DIRECTORY) + if oflags.contains(Oflags::DIRECTORY) && e.get().get_file_type() != Filetype::Directory { tracing::trace!( @@ -665,7 +665,7 @@ impl Handle for VirtualDir { e.get().try_clone().map_err(Into::into) } Entry::Vacant(v) => { - if oflags.contains(&Oflags::CREAT) { + if oflags.contains(Oflags::CREAT) { if self.writable { // Enforce a hard limit at `u32::MAX - 2` files. // This is to have a constant limit (rather than target-dependent limit we