nodejs / node

Node.js JavaScript runtime ✨🐢🚀✨

Home Page:https://nodejs.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

wasi fast calls causes segfault on x86_64-linux when running a wasm32-wasi module

TerrorJack opened this issue · comments

Version

v22.2.0

Platform

Linux build01 6.7.9 #1-NixOS SMP PREEMPT_DYNAMIC Wed Mar 6 14:54:01 UTC 2024 x86_64 GNU/Linux

Subsystem

wasi

What steps will reproduce the bug?

https://files.catbox.moe/izkaki.zst

The above .tar.zst tarball contains openFile008.wasm and wasm-run.mjs in the same directory. openFile008.wasm is a Haskell program compiled from this file that simply creates a temporary directory, then opens/closes some empty files within it. wasm-run.mjs is a script to run it:

#!/usr/bin/env -S node --no-warnings --experimental-wasi-unstable-preview1

import fs from "node:fs/promises";
import { WASI } from "node:wasi";

const wasi = new WASI({
  version: "preview1",
  args: ["openFile008.wasm"],
  env: { PATH: "" },
  preopens: { "/": process.cwd() },
  returnOnExit: false,
});

const instance = (
  await WebAssembly.instantiate(await fs.readFile("openFile008.wasm"), {
    wasi_snapshot_preview1: wasi.wasiImport,
  })
).instance;

wasi.start(instance);

Now, simply run the script above.

How often does it reproduce? Is there a required condition?

No response

What is the expected behavior? Why is that the expected behavior?

It should quickly run to completion without any issue. This is the expected behavior you get by running it with wasmtime run .::/ -- openFile008.wasm, or using node v18 to run the repro script.

What do you see instead?

node process segfaults.

Additional information

I have tried to bisect this breakage on the main branch. The offending commit is b3bf07e that landed #43697. cc @devsnek