GithubHelp home page GithubHelp logo

Comments (6)

TianlongLiang avatar TianlongLiang commented on July 3, 2024

Hi, do you have a minimum reproducible test case that I could take a look at?

from wasm-micro-runtime.

sasq64 avatar sasq64 commented on July 3, 2024

After further investigation it seems to happens because data segments are allowed to truncate trailing zeroes and rely on the fact that target memory is zeroed.

Is it possible that mmap()ed memory is zeroed by default on normal systems but not on zephyr ?

from wasm-micro-runtime.

TianlongLiang avatar TianlongLiang commented on July 3, 2024

In the Zephyr platform, if you are not explicitly using set_exec_mem_alloc_func, then by default you are using BH_MALLOC(system malloc), you can refer to this file. I think it's worth a try to manually zero out the memory to see whether this is the cause

from wasm-micro-runtime.

sasq64 avatar sasq64 commented on July 3, 2024

Adding a memset() to os_malloc() in zephyr_platform.c fixes the issue.
But most of the time memory is cleared again (like aot_runtime.c / runtime_malloc()) so
I don't think it's the correct fix?

But I am not sure how to find the call to malloc that doesn't clear but should...

from wasm-micro-runtime.

wenyongh avatar wenyongh commented on July 3, 2024

@sasq64 sounds like os_mmap doesn't clear the memory in zephyr platform, os_mmap is supposed to memset the memory with 0 by default. Could you please try:

diff --git a/core/shared/platform/zephyr/zephyr_platform.c b/core/shared/platform/zephyr/zephyr_platform.c
index fc54ba55..4827c323 100644
--- a/core/shared/platform/zephyr/zephyr_platform.c
+++ b/core/shared/platform/zephyr/zephyr_platform.c
@@ -179,12 +179,18 @@ strcspn(const char *s, const char *reject)
 void *
 os_mmap(void *hint, size_t size, int prot, int flags, os_file_handle file)
 {
+    void *addr;
+
     if ((uint64)size >= UINT32_MAX)
         return NULL;
     if (exec_mem_alloc_func)
-        return exec_mem_alloc_func((uint32)size);
+        addr = exec_mem_alloc_func((uint32)size);
     else
-        return BH_MALLOC(size);
+        addr = BH_MALLOC(size);
+
+    if (addr)
+        memset(addr, 0, size);
+    return addr;
 }

 void *

from wasm-micro-runtime.

sasq64 avatar sasq64 commented on July 3, 2024

I see you have already merge this to main. Anyway, no surprise -- this fixes the issue.

from wasm-micro-runtime.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.