Skip to content

fix(wasix): report /dev/null as a character device#6465

Open
artemyarulin wants to merge 1 commit intomainfrom
fix/dev-null-type
Open

fix(wasix): report /dev/null as a character device#6465
artemyarulin wants to merge 1 commit intomainfrom
fix/dev-null-type

Conversation

@artemyarulin
Copy link
Copy Markdown
Contributor

Fix WASIX /dev/null metadata so it stats as a character device instead of a regular file.

Previously, /dev/null behaved like a null device for I/O, but stat()/fstat() reported it as a regular file.

Copy link
Copy Markdown
Member

@Arshia001 Arshia001 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See comments.

file: Mutex::new(file),
metadata: {
let time = time();
let is_char_device = path.starts_with("/dev");
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This check is way too broad. Off the top of my head, nothing prevents wasix apps from creating normal files in /dev, and this also creates real chances for regressions if we add more things to /dev from the host side.

@artemyarulin
Copy link
Copy Markdown
Contributor Author

Shield - Regression 💩💩💩

Language Tests Pass rate now PASS FAIL TIMEOUT CRASH
Python 37,965 74.4% $${\color{green}+5}$$ $${\color{red}+14}$$ $${\color{green}-24}$$ 0
Node.js 5,094 19.9% $${\color{green}+3}$$ $${\color{green}-19}$$ $${\color{red}+44}$$ $${\color{green}-31}$$
PHP 19,917 72.2% $${\color{green}+3}$$ $${\color{green}-3}$$ 0 $${\color{green}-1}$$
Rust 24,084 86.4% $${\color{red}-1}$$ $${\color{red}+41}$$ 0 $${\color{red}+3}$$

Example crash from Python

  • Repro command: shield run --lang python --wasmer [WASMER BINARY] test.test_os
  • Full status file: [tests_python_results.json](https://github.com/wasmerio/compat-tests/blob/ 8 files changed, 289 insertions(+), 318 deletions(-)/tests_python_results.json)
crash: test_dup2_negative_fd (test.test_os.TestInvalidFD.test_dup2_negative_fd) ... memory allocation of 274877906944 bytes failed
stack backtrace:
   0:     0x55a4cf3065c2 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::hdadc7c28d26d7ce3
   1:     0x55a4cf31af5a - core::fmt::write::h469843d235cc4241
   2:     0x55a4cf2c8986 - std::io::Write::write_fmt::h384251ddb7f1467c
   3:     0x55a4cf2dbc6e - std::alloc::default_alloc_error_hook::h4f14f7c42c459bc4
   4:     0x55a4cf2dbd16 - std::alloc::rust_oom::{{closure}}::he56f046becd6482a
   5:     0x55a4cf2d9229 - std::sys::backtrace::__rust_end_short_backtrace::hb92aa0636159dd89
   6:     0x55a4cf2dbcea - std::alloc::rust_oom::h5e12a122d00da65c
   7:     0x55a4cf2bb953 - __rustc[16f1505adc47261a]::__rust_alloc_error_handler
   8:     0x55a4cf315bbc - alloc::alloc::handle_alloc_error::h9898627cde6f100a
   9:     0x55a4cf315fa9 - alloc::raw_vec::handle_error::hfa86a3a4628bd209
  10:     0x55a4caa8cace - alloc::raw_vec::RawVecInner<A>::reserve::do_reserve_and_handle::hbeffd85500228655
  11:     0x55a4cad17105 - alloc::vec::Vec<T,A>::resize::h09faf9851c6ccd86
  12:     0x55a4cad2c476 - wasmer_wasix::fs::fd_list::FdList::insert::h3ab3929d3b968dcf
  13:     0x55a4caee5c36 - wasmer_wasix::syscalls::wasi::fd_renumber::fd_renumber_internal::h5a911812959accb4
  14:     0x55a4caee4e6d - wasmer_wasix::syscalls::wasi::fd_renumber::fd_renumber::hbafa196b9679046d
  15:     0x55a4cae410c4 - corosensei::coroutine::on_stack::wrapper::h91dea9655da508cf
  16:     0x55a4ce8a4169 - stack_call_trampoline
  17:     0x55a4cacb2f4e - wasmer_vm::trap::traphandlers::on_host_stack::h45464539e3601cb5
  18:     0x55a4caba65cb - wasmer::backend::sys::entities::function::gen_fn_callback_s2::func_wrapper::h980a0191116fcbec
  19:     0x7f9d1f3acb6d - <unknown>
  20:     0x7f9d1f3ab68e - <unknown>
  21:     0x7f9d1fc2b6a0 - <unknown>
  22:     0x7f9d1f783129 - <unknown>
  23:     0x7f9d1f61b4d2 - <unknown>
  24:     0x7f9d1f71194b - <unknown>
  25:     0x7f9d1f6c5b20 - <unknown>
  26:     0x7f9d1f6c59c4 - <unknown>
  27:     0x7f9d1f6cc75e - <unknown>
  28:     0x7f9d1f6c5728 - <unknown>
  29:     0x7f9d1f6c5891 - <unknown>
  30:     0x7f9d1f70cd91 - <unknown>
  31:     0x7f9d1f6c5b20 - <unknown>
  32:     0x7f9d1f6c59c4 - <unknown>
  33:     0x7f9d1f6c4b17 - <unknown>
  34:     0x7f9d1f6c5f16 - <unknown>
  35:     0x7f9d1f7d8b92 - <unknown>
  36:     0x7f9d1f6c4537 - <unknown>
  37:     0x7f9d1f684974 - <unknown>

Example crash from Node.js

  • Repro command: shield run --lang node --wasmer [WASMER BINARY] async-hooks/test-async-exec-resource-http-32060.js
  • Full status file: [tests_node_results.json](https://github.com/wasmerio/compat-tests/blob/ 8 files changed, 289 insertions(+), 318 deletions(-)/tests_node_results.json)
crash:     /home/runner/work/anti-regression-shield/anti-regression-shield/.work/node/node-wrapper-bf1d279c94374dc4.sh: line 12: 64865 Segmentation fault      (core dumped) '/home/runner/work/anti-regression-shield/anti-regression-shield/.work/wasmer/checkout/target/release/wasmer' run --registry 'wasmer.io' --net '--experimental-napi' --volume '/home/runner/work/anti-regression-shield/anti-regression-shield/.work/node/checkout:/home/runner/work/anti-regression-shield/anti-regression-shield/.work/node/checkout' 'wasmer/edgejs' -- "$@"

Example crash from PHP

  • Repro command: shield run --lang php --wasmer [WASMER BINARY] php-batch-0316
  • Full status file: [tests_php_results.json](https://github.com/wasmerio/compat-tests/blob/ 8 files changed, 289 insertions(+), 318 deletions(-)/tests_php_results.json)
crash: thread 'TokioTaskManager Thread Pool_thread_6' (27549) panicked at lib/wasix/src/syscalls/wasi/path_rename.rs:285:10:
Expected target inode to exist, and it's too late to safely fail: Errno::noent
stack backtrace:
   0:     0x55f0009505c2 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::hdadc7c28d26d7ce3
   1:     0x55f000964f5a - core::fmt::write::h469843d235cc4241
   2:     0x55f000912986 - std::io::Write::write_fmt::h384251ddb7f1467c
   3:     0x55f000929f09 - std::panicking::default_hook::{{closure}}::hd9d92b9a46805102
   4:     0x55f000929d69 - std::panicking::default_hook::hedb2be0819bbe276
   5:     0x55f00092a1fb - std::panicking::panic_with_hook::h0fc23abecf35c6bd
   6:     0x55f000929fc8 - std::panicking::panic_handler::{{closure}}::ha111c1a3ccf85d19
   7:     0x55f000923209 - std::sys::backtrace::__rust_end_short_backtrace::h41d63216e1ba5fa4
   8:     0x55f00090577d - __rustc[16f1505adc47261a]::rust_begin_unwind
   9:     0x55f00097066c - core::panicking::panic_fmt::hc13412975f563dde
  10:     0x55f00096f822 - core::result::unwrap_failed::hd8abf8e6faab58b4
  11:     0x55effc17e201 - wasmer_wasix::syscalls::wasi::path_rename::path_rename_internal::hbc0fbfdc4d3d9177
  12:     0x55effc17aca3 - wasmer_wasix::syscalls::wasi::path_rename::path_rename::h0da49911ba91acd1
  13:     0x55effc488952 - corosensei::coroutine::on_stack::wrapper::h7b1afa34c668e91d
  14:     0x55efffeee169 - stack_call_trampoline
  15:     0x55effc30f158 - wasmer_vm::trap::traphandlers::on_host_stack::hadab4365f541b038
  16:     0x55effc1f81d4 - wasmer::backend::sys::entities::function::gen_fn_callback_s6::func_wrapper::hf0a71574524bae47
  17:     0x7f16de8f5c11 - <unknown>
  18:     0x7f16de931e19 - <unknown>
  19:     0x7f16de933980 - <unknown>
  20:     0x7f16e0567e3d - <unknown>
  21:     0x7f16e042a901 - <unknown>
  22:     0x7f16e066bf39 - <unknown>
  23:     0x7f16e0544311 - <unknown>
  24:     0x7f16e01894ab - <unknown>
  25:     0x7f16e055022b - <unknown>
  26:     0x7f16e054f75f - <unknown>
  27:     0x7f16e071d9ea - <unknown>
  28:     0x7f16e07147a8 - <unknown>
  29:     0x7f16dea2a6e4 - <unknown>
  30:     0x7f16dea2a896 - <unknown>
  31:     0x7f16e072ee03 - <unknown>

Example crash from Rust

  • Repro command: shield run --lang rust --wasmer [WASMER BINARY] library::coretests::coretests-3d2262867062fa53
  • Full status file: [tests_rust_results.json](https://github.com/wasmerio/compat-tests/blob/ 8 files changed, 289 insertions(+), 318 deletions(-)/tests_rust_results.json)
crash: RuntimeError: unaligned atomic access
    at core::sync::atomic::AtomicBool::fetch_nand (coretests-797f608686ad0aa5.wasm[14495]:0xffffffff)
    at coretests::atomic::atomic_access_bool (coretests-797f608686ad0aa5.wasm[25901]:0xffffffff)
    at coretests::atomic::atomic_access_bool::{{closure}} (coretests-797f608686ad0aa5.wasm[25900]:0xffffffff)
    at core::ops::function::FnOnce::call_once (coretests-797f608686ad0aa5.wasm[7577]:0xffffffff)
    at test::__rust_begin_short_backtrace (coretests-797f608686ad0aa5.wasm[27649]:0xffffffff)
    at test::types::RunnableTest::run (coretests-797f608686ad0aa5.wasm[27680]:0xffffffff)
    at test::run_test (coretests-797f608686ad0aa5.wasm[27644]:0xffffffff)
    at test::run_tests (coretests-797f608686ad0aa5.wasm[27642]:0xffffffff)
    at test::console::run_tests_console (coretests-797f608686ad0aa5.wasm[27478]:0xffffffff)
    at test::test_main (coretests-797f608686ad0aa5.wasm[27634]:0xffffffff)
    at test::test_main_static (coretests-797f608686ad0aa5.wasm[27635]:0xffffffff)
    at coretests::main (coretests-797f608686ad0aa5.wasm[12082]:0xffffffff)
    at core::ops::function::FnOnce::call_once (coretests-797f608686ad0aa5.wasm[8940]:0xffffffff)
    at std::sys::backtrace::__rust_begin_short_backtrace (coretests-797f608686ad0aa5.wasm[15611]:0xffffffff)
    at std::rt::lang_start::{{closure}} (coretests-797f608686ad0aa5.wasm[675]:0xffffffff)
    at std::rt::lang_start_internal (coretests-797f608686ad0aa5.wasm[27950]:0xffffffff)
    at std::rt::lang_start (coretests-797f608686ad0aa5.wasm[674]:0xffffffff)
    at __main_void (coretests-797f608686ad0aa5.wasm[12083]:0xffffffff)
    at _start (coretests-797f608686ad0aa5.wasm[136]:0xffffffff)

More changed tests

Install shield

  • git clone https://github.com/wasmerio/compat-tests.git
  • cd compat-tests
  • cargo build
  • ./target/debug/shield run --lang <LANG> --wasmer [WASMER BINARY] <TEST OR BATCH>

Artifacts

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants