st-hal: Fix issues found in static analysis
Fix statibility issues found out by static analysis tools
Change-Id: Ib217445a70e32fed89ca6c91e91807efcf81e40e
diff --git a/sound_trigger_platform.c b/sound_trigger_platform.c
index fcab41e..03d9c96 100755
--- a/sound_trigger_platform.c
+++ b/sound_trigger_platform.c
@@ -2044,7 +2044,8 @@
if (my_data->xml_version < PLATFORM_XML_VERSION_0x0106) {
ALOGE("%s: Unexpected platform xml version 0x%x, exiting", __func__,
my_data->xml_version);
- return -EINVAL;
+ ret = -EINVAL;
+ goto err_exit;
}
/* Get the last added vendor_info node */
diff --git a/st_hw_session_lsm.c b/st_hw_session_lsm.c
index 4ffd9fd..a5de07e 100644
--- a/st_hw_session_lsm.c
+++ b/st_hw_session_lsm.c
@@ -1343,6 +1343,7 @@
pthread_create(&p_lsm_ses->buffer_thread, &attr,
buffer_thread_loop, p_lsm_ses);
+ pthread_attr_destroy(&attr);
return status;
error_exit:
diff --git a/st_session.c b/st_session.c
index e8704bc..f9d38e3 100644
--- a/st_session.c
+++ b/st_session.c
@@ -2524,7 +2524,8 @@
}
if (param_hdr->payload_size != conf_levels_payload_size) {
ALOGE("%s: Conf level format error, exiting", __func__);
- return -EINVAL;
+ status = -EINVAL;
+ goto ERR_EXIT;
}
status = parse_rc_config_key_conf_levels(stc_ses, st_hw_ses,
opaque_ptr, &conf_levels, &num_conf_levels);
@@ -2535,7 +2536,8 @@
if (status) {
ALOGE("%s: parsing conf levels failed(status=%d)",
__func__, status);
- return -EINVAL;
+ status = -EINVAL;
+ goto ERR_EXIT;
}
break;
case ST_PARAM_KEY_HISTORY_BUFFER_CONFIG:
@@ -2543,7 +2545,8 @@
sizeof(struct st_hist_buffer_info)) {
ALOGE("%s: History buffer config format error, exiting",
__func__);
- return -EINVAL;
+ status = -EINVAL;
+ goto ERR_EXIT;
}
hist_buf = (struct st_hist_buffer_info *)(opaque_ptr +
sizeof(struct st_param_header));
@@ -2563,7 +2566,8 @@
if (param_hdr->payload_size !=
sizeof(struct st_det_perf_mode_info)) {
ALOGE("%s: Opaque data format error, exiting", __func__);
- return -EINVAL;
+ status = -EINVAL;
+ goto ERR_EXIT;
}
det_perf_mode = (struct st_det_perf_mode_info *)(opaque_ptr +
sizeof(struct st_param_header));
@@ -2576,7 +2580,8 @@
break;
default:
ALOGE("%s: Unsupported opaque data key id, exiting", __func__);
- return -EINVAL;
+ status = -EINVAL;
+ goto ERR_EXIT;
}
}
} else if (stc_ses->sm_type == SOUND_MODEL_TYPE_KEYPHRASE) {
@@ -2610,7 +2615,8 @@
stc_ses->sm_info.model_id);
if (!sthw_cfg) {
ALOGE("%s: Unexpected, no matching sthw_cfg", __func__);
- return -EINVAL;
+ status = -EINVAL;
+ goto ERR_EXIT;
}
if (stc_ses->f_stage_version == ST_MODULE_TYPE_GMM) {
@@ -2634,7 +2640,8 @@
if (num_conf_levels != stc_ses->sm_info.cf_levels_size) {
ALOGE("%s: Unexpected, client cf levels %d != sm_info cf levels %d",
__func__, num_conf_levels, stc_ses->sm_info.cf_levels_size);
- return -EINVAL;
+ status = -EINVAL;
+ goto ERR_EXIT;
}
/*
@@ -2779,6 +2786,12 @@
st_ses->lab_enabled);
return status;
+
+ERR_EXIT:
+ if (conf_levels) {
+ free(conf_levels);
+ }
+ return status;
}
static int reg_all_sm(st_proxy_session_t *st_ses, st_hw_session_t *hw_ses)