wasmerio/wasmer

Potential Bug: Use-of-Uninitialized-Value

Opened this issue · 1 comments

Describe the bug

wasmer may contain use of uninitialized value: sanitizer warns during building process.

wasmer -vV; rustc -vV

wasmer version or commit: (Trying to build last version of `wasmer`. Last commit: [5aba707])

Operating system: Linux

Kernel version: 5.15.0-56-generic

Architecture: x86_64
------------------------
rustc -vV:

rustc 1.78.0-nightly (a84bb95a1 2024-02-13)
binary: rustc
commit-hash: a84bb95a1f65bfe25038f188763a18e096a86ab2
commit-date: 2024-02-13
host: x86_64-unknown-linux-gnu
release: 1.78.0-nightly
LLVM version: 18.1.0

Steps to reproduce

Build wasmer with necessary flags:

git clone https://github.com/wasmerio/wasmer.git
cd wasmer
export CC=clang-17
export CXX=clang++-17
export CFLAGS="-fsanitize=memory"
export CXXFLAGS="-fsanitize=memory"
export RUSTFLAGS='-Zsanitizer=memory -Zsanitizer-memory-track-origins' 
export RUSTDOCFLAGS='-Zsanitizer=memory -Zsanitizer-memory-track-origins' 
make build-wasmer

Expected behavior

Wasmer should be built without encountering uninitialized memory use issues, ensuring all memory operations are safely handled.

For example, with the same procedure of building wasmi is successfully and run the WebAssembly modules.

Actual behavior

Sanitizer gives an error and AFL++ marks this as a crash.

error: failed to run custom build command for `serde v1.0.193`

Caused by:
  process didn't exit successfully: `/users/khan22/wasmoi/differential_testing/wasmer-wasmtime-wasmi/harness/wasmer/target/release/build/serde-033bd664dadcc0e3/build-script-build` (exit status: 1)
  --- stdout
  cargo:rerun-if-changed=build.rs

  --- stderr
  ==137762==WARNING: MemorySanitizer: use-of-uninitialized-value
      #0 0x561234274088 in build_script_build::rustc_minor_version::h21f07d22179264bc build_script_build.c42c43d9103e7db7-cgu.0
      #1 0x561234272907 in build_script_build::main::he6eef1966de056f4 build_script_build.c42c43d9103e7db7-cgu.0
      #2 0x56123425aedb in core::ops::function::FnOnce::call_once::h647f1ef364f5b35c build_script_build.c42c43d9103e7db7-cgu.0
      #3 0x561234257975 in std::sys_common::backtrace::__rust_begin_short_backtrace::he96532e6744860b9 build_script_build.c42c43d9103e7db7-cgu.0
      #4 0x56123425a0d4 in std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::h9f67b8c7123ace08 build_script_build.c42c43d9103e7db7-cgu.0
      #5 0x56123428efb2 in std::rt::lang_start_internal::h8c0e5120d4bd787e (/users/khan22/wasmoi/differential_testing/wasmer-wasmtime-wasmi/harness/wasmer/target/release/build/serde-033bd664dadcc0e3/build-script-build+0xb6fb2) (BuildId: 8a5a586196379dfcf0f914a027c39e85fedc1231)
      #6 0x561234259fcb in std::rt::lang_start::h7ed09d57c3ba178f (/users/khan22/wasmoi/differential_testing/wasmer-wasmtime-wasmi/harness/wasmer/target/release/build/serde-033bd664dadcc0e3/build-script-build+0x81fcb) (BuildId: 8a5a586196379dfcf0f914a027c39e85fedc1231)
      #7 0x5612342756cb in main (/users/khan22/wasmoi/differential_testing/wasmer-wasmtime-wasmi/harness/wasmer/target/release/build/serde-033bd664dadcc0e3/build-script-build+0x9d6cb) (BuildId: 8a5a586196379dfcf0f914a027c39e85fedc1231)
      #8 0x7fd15e256d8f in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
      #9 0x7fd15e256e3f in __libc_start_main csu/../csu/libc-start.c:392:3
      #10 0x5612341e8824 in _start (/users/khan22/wasmoi/differential_testing/wasmer-wasmtime-wasmi/harness/wasmer/target/release/build/serde-033bd664dadcc0e3/build-script-build+0x10824) (BuildId: 8a5a586196379dfcf0f914a027c39e85fedc1231)

    Uninitialized value was created by an allocation of '_2' in the stack frame
      #0 0x561234273f76 in build_script_build::rustc_minor_version::h21f07d22179264bc build_script_build.c42c43d9103e7db7-cgu.0

  SUMMARY: MemorySanitizer: use-of-uninitialized-value build_script_build.c42c43d9103e7db7-cgu.0 in build_script_build::rustc_minor_version::h21f07d22179264bc
  Exiting

Additional context

The issue is a byproduct of fuzzing WASM implementations with a combination of AFL++ and Wasmlike, an Xsmith-based random program generator . Xsmith Project