wasmer_wasix/syscalls/wasix/
dl_invalid_handle.rs1use state::ModuleHandle;
2
3use super::*;
4use crate::syscalls::*;
5
6#[instrument(level = "trace", skip_all, fields(path = field::Empty), ret)]
7pub fn dl_invalid_handle(
8 mut ctx: FunctionEnvMut<'_, WasiEnv>,
9 handle: DlHandle,
10) -> Result<Errno, WasiError> {
11 WasiEnv::do_pending_operations(&mut ctx)?;
12
13 let (env, mut store) = ctx.data_and_store_mut();
14 let memory = unsafe { env.memory_view(&store) };
15
16 let handle = if handle == 0 {
17 return Ok(Errno::Noexec);
19 } else {
20 ModuleHandle::from(handle)
21 };
22
23 let env_inner = unsafe { env.inner() };
24 let Some(linker) = env_inner.linker() else {
25 return Ok(Errno::Noexec);
27 };
28
29 let is_valid = linker
30 .clone()
31 .is_handle_valid(handle, &mut ctx)
32 .unwrap_or(false);
33
34 Ok(if is_valid {
35 Errno::Success
36 } else {
37 Errno::Noexec
38 })
39}