summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sound/soc/msm/qdsp6v2/q6adm.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/sound/soc/msm/qdsp6v2/q6adm.c b/sound/soc/msm/qdsp6v2/q6adm.c
index 5478920e38a9..dc7165263316 100644
--- a/sound/soc/msm/qdsp6v2/q6adm.c
+++ b/sound/soc/msm/qdsp6v2/q6adm.c
@@ -1219,7 +1219,7 @@ static int adm_process_get_param_response(u32 opcode, u32 idx, u32 *payload,
struct adm_cmd_rsp_get_pp_params_v5 *v5_rsp = NULL;
struct adm_cmd_rsp_get_pp_params_v6 *v6_rsp = NULL;
u32 *param_data = NULL;
- int data_size;
+ int data_size = 0;
int struct_size;
if (payload == NULL) {
@@ -1233,7 +1233,7 @@ static int adm_process_get_param_response(u32 opcode, u32 idx, u32 *payload,
if (payload_size < struct_size) {
pr_err("%s: payload size %d < expected size %d\n",
__func__, payload_size, struct_size);
- break;
+ return -EINVAL;
}
v5_rsp = (struct adm_cmd_rsp_get_pp_params_v5 *) payload;
data_size = v5_rsp->param_hdr.param_size;
@@ -1244,7 +1244,7 @@ static int adm_process_get_param_response(u32 opcode, u32 idx, u32 *payload,
if (payload_size < struct_size) {
pr_err("%s: payload size %d < expected size %d\n",
__func__, payload_size, struct_size);
- break;
+ return -EINVAL;
}
v6_rsp = (struct adm_cmd_rsp_get_pp_params_v6 *) payload;
data_size = v6_rsp->param_hdr.param_size;
@@ -1272,6 +1272,10 @@ static int adm_process_get_param_response(u32 opcode, u32 idx, u32 *payload,
pr_debug("%s: GET_PP PARAM: received parameter length: 0x%x\n",
__func__, adm_get_parameters[idx]);
/* store params after param_size */
+ if (param_data == NULL) {
+ pr_err("%s: Invalid parameter data got!\n", __func__);
+ return -EINVAL;
+ }
memcpy(&adm_get_parameters[idx + 1], param_data, data_size);
return 0;
}