WASI icon indicating copy to clipboard operation
WASI copied to clipboard

Whether validate exit status for proc_exit is needed

Open luxinyi0105 opened this issue 1 year ago • 1 comments

Recently, while executing the same wasm file with different wasm runtime tools, the obtained results were different. Here are related files.

The given testcase simply mutated a wasm file, which was obtained by compiling C program generated with Csmith using Emscripten Compiler(Emcc).

The original C program is c_file.c, the compilation results with Emscripten is wasm_file.wasm, and its wat format is wat_file.wat.

We mutated the wat file to change its global.set 0 in line 7627 with local.set 0. The result after mutation is mutated_file.wat, and its wasm format is mutated_file.wasm.

We use runtime tools such as wasmer, wasmtime, wasmedge and wasmi to execute mutated_file.wasm. Wasmtime outputs checksum results with runtime error, while other tools only output checksum results. The execution results of different tools are shown in the following figure. runtime result

It seems that tools such as wasmtime and wasmi validate exit status, while other tools do not. Mutation makes the provided status isn't in the printed range, resulting in runtime error for tools like wasmtime when outputting checksum results.

The current documentation for proc_exit does not exactly specify what to do here. So I wonder whether this behavior is still desired and/or should be codified in the documentation. If not wasmtime should remove it. If so other runtimes should be updated. Thanks a lot!

luxinyi0105 avatar Aug 29 '23 07:08 luxinyi0105

Is this related to https://github.com/WebAssembly/WASI/issues/524 and https://github.com/WebAssembly/wasi-cli/issues/11?

abrown avatar Aug 29 '23 18:08 abrown