WebAssembly / WASI

WebAssembly System Interface
Other
4.72k stars 240 forks source link

Whether validate exit status for proc_exit is needed #551

Open luxinyi0105 opened 10 months ago

luxinyi0105 commented 10 months ago

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 Csmithusing 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!

abrown commented 10 months ago

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