From f12ce981e54b9202c348565b73021e1ac31e951f Mon Sep 17 00:00:00 2001 From: Erin Yan Date: Thu, 14 Nov 2019 10:13:38 +0800 Subject: [PATCH] ASoc: msm: Fix KW issues for audio adm driver Add variable initialization and NULL pointer check. Return error in invalid parameter case to simplify the logic. Change-Id: I1fbdb156b34075014a525723f439fb96c457d350 Signed-off-by: Erin Yan --- sound/soc/msm/qdsp6v2/q6adm.c | 10 +++++++--- 1 file 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; }