From da5be19571159dab6c0f10ceca587debad7f9ac4 Mon Sep 17 00:00:00 2001 From: Martijn Stevenson Date: Sat, 26 Oct 2024 02:28:23 +0000 Subject: [PATCH 1/2] fix: Implement getentropy while Emscripten gets patched Issue: https://github.com/emscripten-core/emscripten/issues/22782 Signed-off-by: Martijn Stevenson --- proxy_wasm_intrinsics.cc | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/proxy_wasm_intrinsics.cc b/proxy_wasm_intrinsics.cc index a6e8b8b..e32cc7b 100644 --- a/proxy_wasm_intrinsics.cc +++ b/proxy_wasm_intrinsics.cc @@ -271,3 +271,30 @@ extern "C" PROXY_WASM_KEEPALIVE void proxy_on_foreign_function(uint32_t context_id, uint32_t foreign_function_id, uint32_t data_size) { getContextBase(context_id)->onForeignFunction(foreign_function_id, data_size); } + +// Patch an Emscripten gap: https://github.com/emscripten-core/emscripten/issues/22782 +// Implement getentropy for RNG support (e.g. for absl::random). + +int32_t __imported_wasi_snapshot_preview1_random_get(int32_t arg0, int32_t arg1) + __attribute__((__import_module__("wasi_snapshot_preview1"), __import_name__("random_get"))); + +typedef uint16_t __wasi_errno_t; +typedef size_t __wasi_size_t; + +__wasi_errno_t __wasi_random_get(uint8_t *buf, __wasi_size_t buf_len) { + int32_t ret = __imported_wasi_snapshot_preview1_random_get((int32_t)buf, (int32_t)buf_len); + return (uint16_t)ret; +} + +extern "C" int getentropy(void *buffer, size_t len) { + if (len > 256) { + errno = EIO; + return -1; + } + int r = __wasi_random_get((uint8_t *)buffer, len); + if (r != 0) { + errno = r; + return -1; + } + return 0; +} From ddf95198600fee8f72de14255c0a5b38195cfea5 Mon Sep 17 00:00:00 2001 From: Martijn Stevenson Date: Mon, 28 Oct 2024 13:17:01 +0000 Subject: [PATCH 2/2] Remove unnecessary type conversions Signed-off-by: Martijn Stevenson --- proxy_wasm_intrinsics.cc | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/proxy_wasm_intrinsics.cc b/proxy_wasm_intrinsics.cc index e32cc7b..93ae120 100644 --- a/proxy_wasm_intrinsics.cc +++ b/proxy_wasm_intrinsics.cc @@ -275,16 +275,11 @@ proxy_on_foreign_function(uint32_t context_id, uint32_t foreign_function_id, uin // Patch an Emscripten gap: https://github.com/emscripten-core/emscripten/issues/22782 // Implement getentropy for RNG support (e.g. for absl::random). -int32_t __imported_wasi_snapshot_preview1_random_get(int32_t arg0, int32_t arg1) - __attribute__((__import_module__("wasi_snapshot_preview1"), __import_name__("random_get"))); - typedef uint16_t __wasi_errno_t; typedef size_t __wasi_size_t; -__wasi_errno_t __wasi_random_get(uint8_t *buf, __wasi_size_t buf_len) { - int32_t ret = __imported_wasi_snapshot_preview1_random_get((int32_t)buf, (int32_t)buf_len); - return (uint16_t)ret; -} +__wasi_errno_t __wasi_random_get(uint8_t *buf, __wasi_size_t buf_len) + __attribute__((__import_module__("wasi_snapshot_preview1"), __import_name__("random_get"))); extern "C" int getentropy(void *buffer, size_t len) { if (len > 256) {