瀏覽代碼

lib-pthread: Fix pthread_create callback arg issue (#701)

The last argument arg of pthread_create passed from wasm app is opaque
for the library and host, it should be returned back to the wasm app without
any interpretation. There is no point to translate it to a native address.
Actually it harms because the validation seems broken.
YAMAMOTO Takashi 4 年之前
父節點
當前提交
e80715f352
共有 1 個文件被更改,包括 4 次插入13 次删除
  1. 4 13
      core/iwasm/libraries/lib-pthread/lib_pthread_wrapper.c

+ 4 - 13
core/iwasm/libraries/lib-pthread/lib_pthread_wrapper.c

@@ -112,7 +112,7 @@ typedef struct {
     /* table elem index of the app's entry function */
     uint32 elem_index;
     /* arg of the app's entry function */
-    void *arg;
+    uint32 arg;
     wasm_module_inst_t module_inst;
 } ThreadRoutineArgs;
 
@@ -479,17 +479,8 @@ pthread_start_routine(void *arg)
     os_cond_signal(&parent_exec_env->wait_cond);
     os_mutex_unlock(&parent_exec_env->wait_lock);
 
-    if (!validate_native_addr(routine_args->arg, sizeof(uint32))) {
-        /* If there are exceptions, copy the exception to
-            all other instance in this cluster */
-        wasm_cluster_spread_exception(exec_env);
-        wasm_runtime_deinstantiate_internal(module_inst, true);
-        delete_thread_info_node(info_node);
-        return NULL;
-    }
-
     wasm_exec_env_set_thread_info(exec_env);
-    argv[0] = addr_native_to_app(routine_args->arg);
+    argv[0] = routine_args->arg;
 
     if(!wasm_runtime_call_indirect(exec_env,
                                    routine_args->elem_index,
@@ -532,7 +523,7 @@ pthread_create_wrapper(wasm_exec_env_t exec_env,
                        uint32 *thread,      /* thread_handle */
                        const void *attr,    /* not supported */
                        uint32 elem_index,   /* entry function */
-                       void *arg)           /* arguments buffer */
+                       uint32 arg)          /* arguments buffer */
 {
     wasm_module_t module = get_module(exec_env);
     wasm_module_inst_t module_inst = get_module_inst(exec_env);
@@ -1066,7 +1057,7 @@ posix_memalign_wrapper(wasm_exec_env_t exec_env,
     { #func_name, func_name##_wrapper, signature, NULL }
 
 static NativeSymbol native_symbols_lib_pthread[] = {
-    REG_NATIVE_FUNC(pthread_create,         "(**i*)i"),
+    REG_NATIVE_FUNC(pthread_create,         "(**ii)i"),
     REG_NATIVE_FUNC(pthread_join,           "(ii)i"),
     REG_NATIVE_FUNC(pthread_detach,         "(i)i"),
     REG_NATIVE_FUNC(pthread_cancel,         "(i)i"),