Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RuntimeError: indirect call type mismatch on Windows when running sharrattj/bash and accessing / #3929

Closed
Michael-F-Bryan opened this issue May 30, 2023 · 1 comment

Comments

@Michael-F-Bryan
Copy link
Contributor

In #3920, we ran into an issue on Windows (failing build) which results in bash erroring out with RuntimeError: indirect call type mismatch.

Steps To Reproduce

$ wasmer run-unstable sharrattj/[email protected] --entrypoint=bash -- -c "ls -l /usr/coreutils/*.md && ls -l /lib/python3.6/*.py"
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Capabilities insufficient
2023-05-30T14:28:02.202145Z  WARN ThreadId(18) wasmer_wasix::syscalls::wasix::proc_exec: failed to create subprocess for fork - notcapable (error 76)
error: RuntimeError: indirect call type mismatch
    at <unnamed> (<module>[583]:0x96372)
    at <unnamed> (<module>[814]:0xc044c)
    at <unnamed> (<module>[51]:0x846b)
╰─▶ 1: RuntimeError: indirect call type mismatch
           at <unnamed> (<module>[583]:0x96372)
           at <unnamed> (<module>[814]:0xc044c)
           at <unnamed> (<module>[51]:0x846b)

Context

From what I've been able to find, resolving something relative to the the root directory (/) would hits an error branch because we call WasiFs::get_inode_at_path_inner() and in that part of the code component is Component::RootDir and we end up doing a lookup in entries with "\" as the key (in my test, it only contained "." and "/").

wasmer/lib/wasi/src/fs/mod.rs

Lines 1140 to 1141 in 9c81cb8

// Root is not capable of having something other then preopenned folders
return Err(Errno::Notcapable);

I believe this Errno::Notcapable causes forking to fail, which means the caller (bash) goes down a different code path and triggers a RuntimeError: indirect call type mismatch.

match state.fs.get_current_dir(inodes, crate::VIRTUAL_ROOT_FD) {
Ok(a) => a,
Err(err) => {
warn!("failed to create subprocess for fork - {}", err);
return Err(WasiError::Exit(err.into()));
}

I'm not sure why we get a mismatched signature error. It may be that there was a long-standing bug, and we've never seen it before because forking has never failed. @john-sharratt may be a better person to talk to about it than me, though.

@syrusakbary
Copy link
Member

Follow up ticket: wasix-org/bash#1 closing here

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants