Explorar o código

Fixing use after free when dumping call stack (#2084)

In multi-threading, this line will eventually call `wasm_cluster_wait_for_all_except_self`:
`DEINIT_VEC(store->instances, wasm_instance_vec_delete)`

As the threads are joining they can call `wasm_interp_dump_call_stack` which tries to
use the module frames but they were already freed by this line:
`DEINIT_VEC(store->modules, wasm_module_vec_delete)`

This PR swaps the order that these are deleted so module is deleted after the instances.

Co-authored-by: Andrew Chambers <ncham@amazon.com>
Andy %!s(int64=2) %!d(string=hai) anos
pai
achega
5aa22d41e9
Modificáronse 1 ficheiros con 1 adicións e 1 borrados
  1. 1 1
      core/iwasm/common/wasm_c_api.c

+ 1 - 1
core/iwasm/common/wasm_c_api.c

@@ -687,8 +687,8 @@ wasm_store_delete(wasm_store_t *store)
         return;
     }
 
-    DEINIT_VEC(store->modules, wasm_module_vec_delete);
     DEINIT_VEC(store->instances, wasm_instance_vec_delete);
+    DEINIT_VEC(store->modules, wasm_module_vec_delete);
     if (store->foreigns) {
         bh_vector_destroy(store->foreigns);
         wasm_runtime_free(store->foreigns);