Skip to content

Commit 6820af6

Browse files
authored
Fix a potential memory leak issue in wasm_native_init (#1465)
Should call `wasm_native_destroy` to destroy the registered native libs when registering native lib failed in `wasm_native_init`.
1 parent da79e3e commit 6820af6

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

core/iwasm/common/wasm_native.c

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -362,70 +362,73 @@ wasm_native_init()
362362
#if WASM_ENABLE_LIBC_BUILTIN != 0
363363
n_native_symbols = get_libc_builtin_export_apis(&native_symbols);
364364
if (!wasm_native_register_natives("env", native_symbols, n_native_symbols))
365-
return false;
365+
goto fail;
366366
#endif /* WASM_ENABLE_LIBC_BUILTIN */
367367

368368
#if WASM_ENABLE_SPEC_TEST
369369
n_native_symbols = get_spectest_export_apis(&native_symbols);
370370
if (!wasm_native_register_natives("spectest", native_symbols,
371371
n_native_symbols))
372-
return false;
372+
goto fail;
373373
#endif /* WASM_ENABLE_SPEC_TEST */
374374

375375
#if WASM_ENABLE_LIBC_WASI != 0
376376
n_native_symbols = get_libc_wasi_export_apis(&native_symbols);
377377
if (!wasm_native_register_natives("wasi_unstable", native_symbols,
378378
n_native_symbols))
379-
return false;
379+
goto fail;
380380
if (!wasm_native_register_natives("wasi_snapshot_preview1", native_symbols,
381381
n_native_symbols))
382-
return false;
382+
goto fail;
383383
#endif
384384

385385
#if WASM_ENABLE_BASE_LIB != 0
386386
n_native_symbols = get_base_lib_export_apis(&native_symbols);
387387
if (n_native_symbols > 0
388388
&& !wasm_native_register_natives("env", native_symbols,
389389
n_native_symbols))
390-
return false;
390+
goto fail;
391391
#endif
392392

393393
#if WASM_ENABLE_APP_FRAMEWORK != 0
394394
n_native_symbols = get_ext_lib_export_apis(&native_symbols);
395395
if (n_native_symbols > 0
396396
&& !wasm_native_register_natives("env", native_symbols,
397397
n_native_symbols))
398-
return false;
398+
goto fail;
399399
#endif
400400

401401
#if WASM_ENABLE_LIB_PTHREAD != 0
402402
if (!lib_pthread_init())
403-
return false;
403+
goto fail;
404404

405405
n_native_symbols = get_lib_pthread_export_apis(&native_symbols);
406406
if (n_native_symbols > 0
407407
&& !wasm_native_register_natives("env", native_symbols,
408408
n_native_symbols))
409-
return false;
409+
goto fail;
410410
#endif
411411

412412
#if WASM_ENABLE_LIBC_EMCC != 0
413413
n_native_symbols = get_libc_emcc_export_apis(&native_symbols);
414414
if (n_native_symbols > 0
415415
&& !wasm_native_register_natives("env", native_symbols,
416416
n_native_symbols))
417-
return false;
417+
goto fail;
418418
#endif /* WASM_ENABLE_LIBC_EMCC */
419419

420420
#if WASM_ENABLE_LIB_RATS != 0
421421
n_native_symbols = get_lib_rats_export_apis(&native_symbols);
422422
if (n_native_symbols > 0
423423
&& !wasm_native_register_natives("env", native_symbols,
424424
n_native_symbols))
425-
return false;
425+
goto fail;
426426
#endif /* WASM_ENABLE_LIB_RATS */
427427

428428
return true;
429+
fail:
430+
wasm_native_destroy();
431+
return false;
429432
}
430433

431434
void

core/iwasm/libraries/lib-rats/lib_rats_wrapper.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ librats_verify_wrapper(wasm_exec_env_t exec_env, const char *evidence_json,
4545
/* clang-format off */
4646
#define REG_NATIVE_FUNC(func_name, signature) \
4747
{ #func_name, func_name##_wrapper, signature, NULL }
48-
/* clang-format off */
48+
/* clang-format on */
4949

5050
static NativeSymbol native_symbols_lib_rats[] = {
5151
REG_NATIVE_FUNC(librats_collect, "($)i"),

0 commit comments

Comments
 (0)