From 0fa0813a5a918766d7122bb46233c5e5fc048d8f Mon Sep 17 00:00:00 2001 From: Wenyong Huang Date: Wed, 22 Feb 2023 11:10:21 +0800 Subject: [PATCH] Fix issues reported by Coverity static analysis (#1974) --- core/iwasm/common/wasm_c_api.c | 3 +-- core/iwasm/fast-jit/jit_ir.c | 2 ++ core/iwasm/fast-jit/jit_ir.h | 4 ++++ core/iwasm/fast-jit/jit_regalloc.c | 14 +++++++++++--- core/shared/platform/common/posix/posix_thread.c | 5 +++-- 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/core/iwasm/common/wasm_c_api.c b/core/iwasm/common/wasm_c_api.c index d3c8ea1e..9f6ed1e5 100644 --- a/core/iwasm/common/wasm_c_api.c +++ b/core/iwasm/common/wasm_c_api.c @@ -1657,8 +1657,6 @@ wasm_val_to_rt_val(WASMModuleInstanceCommon *inst_comm_rt, uint8 val_type_rt, ret = wasm_externref_obj2ref(inst_comm_rt, v->of.ref, (uint32 *)data); break; -#else - (void)inst_comm_rt; #endif default: LOG_WARNING("unexpected value type %d", val_type_rt); @@ -1666,6 +1664,7 @@ wasm_val_to_rt_val(WASMModuleInstanceCommon *inst_comm_rt, uint8 val_type_rt, break; } + (void)inst_comm_rt; return ret; } diff --git a/core/iwasm/fast-jit/jit_ir.c b/core/iwasm/fast-jit/jit_ir.c index 9fc8d5cc..db0d86ca 100644 --- a/core/iwasm/fast-jit/jit_ir.c +++ b/core/iwasm/fast-jit/jit_ir.c @@ -560,6 +560,7 @@ address_of_const(JitCompContext *cc, JitReg reg, unsigned size) unsigned no = jit_reg_no(reg); unsigned idx = no & ~_JIT_REG_CONST_IDX_FLAG; + bh_assert(kind < JIT_REG_KIND_L32); bh_assert(jit_reg_is_const_idx(reg) && idx < cc->_const_val._num[kind]); return cc->_const_val._value[kind] + size * idx; @@ -572,6 +573,7 @@ next_of_const(JitCompContext *cc, JitReg reg) unsigned no = jit_reg_no(reg); unsigned idx = no & ~_JIT_REG_CONST_IDX_FLAG; + bh_assert(kind < JIT_REG_KIND_L32); bh_assert(jit_reg_is_const_idx(reg) && idx < cc->_const_val._num[kind]); return cc->_const_val._next[kind][idx]; diff --git a/core/iwasm/fast-jit/jit_ir.h b/core/iwasm/fast-jit/jit_ir.h index 9f91d8a4..632e8ed1 100644 --- a/core/iwasm/fast-jit/jit_ir.h +++ b/core/iwasm/fast-jit/jit_ir.h @@ -1688,6 +1688,7 @@ jit_cc_is_hreg(JitCompContext *cc, JitReg reg) unsigned kind = jit_reg_kind(reg); unsigned no = jit_reg_no(reg); bh_assert(jit_reg_is_variable(reg)); + bh_assert(kind < JIT_REG_KIND_L32); return no < cc->hreg_info->info[kind].num; } @@ -1705,6 +1706,7 @@ jit_cc_is_hreg_fixed(JitCompContext *cc, JitReg reg) unsigned kind = jit_reg_kind(reg); unsigned no = jit_reg_no(reg); bh_assert(jit_cc_is_hreg(cc, reg)); + bh_assert(kind < JIT_REG_KIND_L32); return !!cc->hreg_info->info[kind].fixed[no]; } @@ -1722,6 +1724,7 @@ jit_cc_is_hreg_caller_saved_native(JitCompContext *cc, JitReg reg) unsigned kind = jit_reg_kind(reg); unsigned no = jit_reg_no(reg); bh_assert(jit_cc_is_hreg(cc, reg)); + bh_assert(kind < JIT_REG_KIND_L32); return !!cc->hreg_info->info[kind].caller_saved_native[no]; } @@ -1739,6 +1742,7 @@ jit_cc_is_hreg_caller_saved_jitted(JitCompContext *cc, JitReg reg) unsigned kind = jit_reg_kind(reg); unsigned no = jit_reg_no(reg); bh_assert(jit_cc_is_hreg(cc, reg)); + bh_assert(kind < JIT_REG_KIND_L32); return !!cc->hreg_info->info[kind].caller_saved_jitted[no]; } diff --git a/core/iwasm/fast-jit/jit_regalloc.c b/core/iwasm/fast-jit/jit_regalloc.c index 415b9e4b..5bff465f 100644 --- a/core/iwasm/fast-jit/jit_regalloc.c +++ b/core/iwasm/fast-jit/jit_regalloc.c @@ -156,6 +156,7 @@ rc_get_vr(RegallocContext *rc, JitReg vreg) unsigned no = jit_reg_no(vreg); bh_assert(jit_reg_is_variable(vreg)); + bh_assert(kind < JIT_REG_KIND_L32); return &rc->vregs[kind][no]; } @@ -175,6 +176,7 @@ rc_get_hr(RegallocContext *rc, JitReg hreg) unsigned no = jit_reg_no(hreg); bh_assert(jit_reg_is_variable(hreg) && jit_cc_is_hreg(rc->cc, hreg)); + bh_assert(kind < JIT_REG_KIND_L32); return &rc->hregs[kind][no]; } @@ -208,7 +210,9 @@ static unsigned get_reg_stride(JitReg reg) { static const uint8 strides[] = { 0, 1, 2, 1, 2, 2, 4, 8, 0 }; - return strides[jit_reg_kind(reg)]; + uint32 kind = jit_reg_kind(reg); + bh_assert(kind <= JIT_REG_KIND_L32); + return strides[kind]; } /** @@ -582,13 +586,17 @@ static JitReg allocate_hreg(RegallocContext *rc, JitReg vreg, JitInsn *insn, int distance) { const int kind = jit_reg_kind(vreg); - const HardReg *hregs = rc->hregs[kind]; - const unsigned hreg_num = jit_cc_hreg_num(rc->cc, kind); + const HardReg *hregs; + unsigned hreg_num; JitReg hreg, vreg_to_reload = 0; int min_distance = distance, vr_distance; VirtualReg *vr = rc_get_vr(rc, vreg); unsigned i; + bh_assert(kind < JIT_REG_KIND_L32); + hregs = rc->hregs[kind]; + hreg_num = jit_cc_hreg_num(rc->cc, kind); + if (hreg_num == 0) /* Unsupported hard register kind. */ { diff --git a/core/shared/platform/common/posix/posix_thread.c b/core/shared/platform/common/posix/posix_thread.c index 58370c20..5e814c41 100644 --- a/core/shared/platform/common/posix/posix_thread.c +++ b/core/shared/platform/common/posix/posix_thread.c @@ -61,8 +61,9 @@ os_thread_create_with_prio(korp_tid *tid, thread_start_routine_t start, pthread_attr_init(&tattr); pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_JOINABLE); if (pthread_attr_setstacksize(&tattr, stack_size) != 0) { - os_printf("Invalid thread stack size %u. Min stack size on Linux = %u", - stack_size, PTHREAD_STACK_MIN); + os_printf("Invalid thread stack size %u. " + "Min stack size on Linux = %u\n", + stack_size, (unsigned int)PTHREAD_STACK_MIN); pthread_attr_destroy(&tattr); return BHT_ERROR; }