From a7f4c3c15c7fb2b4bf7b0c2a7c82ba182f0b3a5f Mon Sep 17 00:00:00 2001 From: Xu Jun <693788454@qq.com> Date: Sat, 7 May 2022 15:43:34 +0800 Subject: [PATCH] Fix app manager/framework issues reported by Coverity (#1155) runtime_sensor.c: add return value check for os_mutex_init fix find_sensor_client sensor_mgr_ref.c: add return value check for init_sensor_framework app_manager_host.c: add return value check for app_manager_host_init module_wasm_app.c: add bh_assert for m_data fix mkdir potential issue sample littlevgl/gui/simple: add return value check for init_sensor_framework host_tool: add more check for g_conn_fd --- .../sensor/native/runtime_sensor.c | 9 ++++++- .../sensor/native/runtime_sensor.h | 2 +- .../sensor/native/sensor_mgr_ref.c | 16 +++++++++--- core/app-mgr/app-manager/app_manager_host.c | 12 ++++++--- core/app-mgr/app-manager/module_wasm_app.c | 25 ++++++++++--------- .../src/platform/linux/iwasm_main.c | 8 ++++-- .../src/platform/zephyr/iwasm_main.c | 2 +- .../src/platform/linux/iwasm_main.c | 8 ++++-- .../src/platform/zephyr/iwasm_main.c | 2 +- samples/simple/src/iwasm_main.c | 9 +++++-- test-tools/host-tool/src/main.c | 3 ++- 11 files changed, 66 insertions(+), 30 deletions(-) diff --git a/core/app-framework/sensor/native/runtime_sensor.c b/core/app-framework/sensor/native/runtime_sensor.c index 8222ab3ce..ad7a3fbf5 100644 --- a/core/app-framework/sensor/native/runtime_sensor.c +++ b/core/app-framework/sensor/native/runtime_sensor.c @@ -309,7 +309,13 @@ add_sys_sensor(char *name, char *description, int instance, g_sys_sensors = s; } - os_mutex_init(&s->lock); + if (os_mutex_init(&s->lock) != 0) { + if (s->description) { + wasm_runtime_free(s->description); + } + wasm_runtime_free(s->name); + wasm_runtime_free(s); + } return s; } @@ -358,6 +364,7 @@ find_sensor_client(sys_sensor_t *sensor, unsigned int client_id, return c; } else { + prev = c; c = c->next; } } diff --git a/core/app-framework/sensor/native/runtime_sensor.h b/core/app-framework/sensor/native/runtime_sensor.h index b7fba805d..d7c893111 100644 --- a/core/app-framework/sensor/native/runtime_sensor.h +++ b/core/app-framework/sensor/native/runtime_sensor.h @@ -59,7 +59,7 @@ check_sensor_timers(); void reschedule_sensor_read(); -void +bool init_sensor_framework(); void start_sensor_framework(); diff --git a/core/app-framework/sensor/native/sensor_mgr_ref.c b/core/app-framework/sensor/native/sensor_mgr_ref.c index 304214f46..474ec738d 100644 --- a/core/app-framework/sensor/native/sensor_mgr_ref.c +++ b/core/app-framework/sensor/native/sensor_mgr_ref.c @@ -106,12 +106,18 @@ cb_wakeup_thread() void set_sensor_reshceduler(void (*callback)()); -void +bool init_sensor_framework() { - // init the mutext and conditions - os_cond_init(&cond); - os_mutex_init(&mutex); + /* init the mutext and conditions */ + if (os_cond_init(&cond) != 0) { + return false; + } + + if (os_mutex_init(&mutex) != 0) { + os_cond_destroy(&cond); + return false; + } set_sensor_reshceduler(cb_wakeup_thread); @@ -119,6 +125,8 @@ init_sensor_framework() app_mgr_sensor_event_callback); wasm_register_cleanup_callback(sensor_cleanup_callback); + + return true; } void diff --git a/core/app-mgr/app-manager/app_manager_host.c b/core/app-mgr/app-manager/app_manager_host.c index 6b1c3ba45..08b5df309 100644 --- a/core/app-mgr/app-manager/app_manager_host.c +++ b/core/app-mgr/app-manager/app_manager_host.c @@ -264,15 +264,21 @@ aee_host_msg_callback(void *msg, uint32_t msg_len) bool app_manager_host_init(host_interface *interface) { - os_mutex_init(&host_lock); + if (os_mutex_init(&host_lock) != 0) { + return false; + } memset(&recv_ctx, 0, sizeof(recv_ctx)); host_commu.init = interface->init; host_commu.send = interface->send; host_commu.destroy = interface->destroy; - if (host_commu.init != NULL) - return host_commu.init(); + if (host_commu.init != NULL) { + if (!host_commu.init()) { + os_mutex_destroy(&host_lock); + return false; + } + } return true; } diff --git a/core/app-mgr/app-manager/module_wasm_app.c b/core/app-mgr/app-manager/module_wasm_app.c index dd86524db..5e2b2efc9 100644 --- a/core/app-mgr/app-manager/module_wasm_app.c +++ b/core/app-mgr/app-manager/module_wasm_app.c @@ -207,10 +207,12 @@ app_instance_queue_callback(void *queue_msg, void *arg) wasm_module_inst_t inst = (wasm_module_inst_t)arg; module_data *m_data = app_manager_get_module_data(Module_WASM_App, inst); - wasm_data *wasm_app_data = (wasm_data *)m_data->internal_data; - int message_type = bh_message_type(queue_msg); + wasm_data *wasm_app_data; + int message_type; bh_assert(m_data); + wasm_app_data = (wasm_data *)m_data->internal_data; + message_type = bh_message_type(queue_msg); if (message_type < BASE_EVENT_MAX) { switch (message_type) { @@ -410,16 +412,15 @@ wasm_app_prepare_wasi_dir(wasm_module_t module, const char *module_name, p += module_name_len; *p++ = '\0'; - /* Create a wasi dir for the module */ - if (stat(wasi_dir_buf, &st) == 0) { - /* exist, but is a regular file, not a dir */ - if (st.st_mode & S_IFREG) - return false; - } - else { - /* not exist, create it */ - if (mkdir(wasi_dir_buf, 0777) != 0) - return false; + if (mkdir(wasi_dir_buf, 0777) != 0) { + if (errno == EEXIST) { + /* Failed due to dir already exist */ + if ((stat(wasi_dir_buf, &st) == 0) && (st.st_mode & S_IFDIR)) { + return true; + } + } + + return false; } return true; diff --git a/samples/gui/wasm-runtime-wgl/src/platform/linux/iwasm_main.c b/samples/gui/wasm-runtime-wgl/src/platform/linux/iwasm_main.c index 4a9732f31..cee247707 100644 --- a/samples/gui/wasm-runtime-wgl/src/platform/linux/iwasm_main.c +++ b/samples/gui/wasm-runtime-wgl/src/platform/linux/iwasm_main.c @@ -45,7 +45,7 @@ static char *uart_device = "/dev/ttyS2"; static int baudrate = B115200; #endif -extern void +extern bool init_sensor_framework(); extern void exit_sensor_framework(); @@ -525,7 +525,9 @@ iwasm_main(int argc, char *argv[]) hal_init(); - init_sensor_framework(); + if (!init_sensor_framework()) { + goto fail2; + } // timer manager init_wasm_timer(); @@ -545,6 +547,8 @@ iwasm_main(int argc, char *argv[]) exit_wasm_timer(); exit_sensor_framework(); + +fail2: wgl_exit(); exit_connection_framework(); diff --git a/samples/gui/wasm-runtime-wgl/src/platform/zephyr/iwasm_main.c b/samples/gui/wasm-runtime-wgl/src/platform/zephyr/iwasm_main.c index 9050fa4a1..0f683addf 100644 --- a/samples/gui/wasm-runtime-wgl/src/platform/zephyr/iwasm_main.c +++ b/samples/gui/wasm-runtime-wgl/src/platform/zephyr/iwasm_main.c @@ -16,7 +16,7 @@ #include "display.h" #include "lvgl.h" -extern void +extern bool init_sensor_framework(); extern void exit_sensor_framework(); diff --git a/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/iwasm_main.c b/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/iwasm_main.c index 420f06495..a116e98f5 100644 --- a/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/iwasm_main.c +++ b/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/iwasm_main.c @@ -43,7 +43,7 @@ static char *uart_device = "/dev/ttyS2"; static int baudrate = B115200; #endif -extern void +extern bool init_sensor_framework(); extern void exit_sensor_framework(); @@ -505,7 +505,9 @@ iwasm_main(int argc, char *argv[]) extern void display_SDL_init(); display_SDL_init(); - init_sensor_framework(); + if (!init_sensor_framework()) { + goto fail2; + } // timer manager init_wasm_timer(); @@ -525,6 +527,8 @@ iwasm_main(int argc, char *argv[]) exit_wasm_timer(); exit_sensor_framework(); + +fail2: exit_connection_framework(); fail1: diff --git a/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/iwasm_main.c b/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/iwasm_main.c index ae9e4305d..9cb268847 100644 --- a/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/iwasm_main.c +++ b/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/iwasm_main.c @@ -20,7 +20,7 @@ #include #include -extern void +extern bool init_sensor_framework(); extern void exit_sensor_framework(); diff --git a/samples/simple/src/iwasm_main.c b/samples/simple/src/iwasm_main.c index 121671ffd..0bb33b371 100644 --- a/samples/simple/src/iwasm_main.c +++ b/samples/simple/src/iwasm_main.c @@ -45,7 +45,7 @@ static char *uart_device = "/dev/ttyS2"; static int baudrate = B115200; #endif -extern void +extern bool init_sensor_framework(); extern void exit_sensor_framework(); @@ -525,7 +525,10 @@ iwasm_main(int argc, char *argv[]) } /* sensor framework */ - init_sensor_framework(); + if (!init_sensor_framework()) { + goto fail2; + } + /* add the sys sensor objects */ add_sys_sensor("sensor_test1", "This is a sensor for test", 0, 1000, read_test_sensor, config_test_sensor); @@ -548,6 +551,8 @@ iwasm_main(int argc, char *argv[]) exit_wasm_timer(); exit_sensor_framework(); + +fail2: exit_connection_framework(); fail1: diff --git a/test-tools/host-tool/src/main.c b/test-tools/host-tool/src/main.c index f08e9490e..dbddbf81b 100644 --- a/test-tools/host-tool/src/main.c +++ b/test-tools/host-tool/src/main.c @@ -808,7 +808,8 @@ int main(int argc, char *argv[]) } if (g_conn_fd == -1) { - if (init() != 0) { + if ((init() != 0) + || (g_conn_fd == -1)) { sleep(1); continue; }