ASoC: msm: qdsp6v2: Fix unmap memory command failure

Add pointer validation checks to prevent sending
invalid handles to ADSP as part of unmap memory
regions command.

CRs-Fixed: 1018367
Change-Id: I0dfb2fccb4414ed82ee10d73576fda66a273043d
Signed-off-by: Karthik Reddy Katta <a_katta@codeaurora.org>
This commit is contained in:
Karthik Reddy Katta 2016-05-17 17:29:33 +05:30 committed by syphyr
parent 1f64cd2458
commit 1b377a2e0a
3 changed files with 31 additions and 10 deletions

View File

@ -19,6 +19,8 @@
#include <linux/ratelimit.h>
#include <sound/audio_cal_utils.h>
static int unmap_memory(struct cal_type_data *cal_type,
struct cal_block_data *cal_block);
size_t get_cal_info_size(int32_t cal_type)
{
@ -404,16 +406,12 @@ static void destroy_all_cal_blocks(struct cal_type_data *cal_type)
cal_block = list_entry(ptr,
struct cal_block_data, list);
if (cal_type->info.cal_util_callbacks.unmap_cal != NULL) {
ret = cal_type->info.cal_util_callbacks.
unmap_cal(cal_type->info.reg.cal_type,
cal_block);
if (ret < 0) {
pr_err("%s: unmap_cal failed, cal type %d, ret = %d!\n",
__func__,
cal_type->info.reg.cal_type,
ret);
}
ret = unmap_memory(cal_type, cal_block);
if (ret < 0) {
pr_err("%s: unmap_memory failed, cal type %d, ret = %d!\n",
__func__,
cal_type->info.reg.cal_type,
ret);
}
delete_cal_block(cal_block);
cal_block = NULL;

View File

@ -2779,6 +2779,18 @@ static int adm_unmap_cal_data(int32_t cal_type,
goto done;
}
if (cal_block == NULL) {
pr_err("%s: Cal block is NULL!\n",
__func__);
goto done;
}
if (cal_block->map_data.q6map_handle == 0) {
pr_err("%s: Map handle is NULL, nothing to unmap\n",
__func__);
goto done;
}
atomic_set(&this_adm.mem_map_handles[cal_index],
cal_block->map_data.q6map_handle);
atomic_set(&this_adm.mem_map_index, cal_index);

View File

@ -4897,6 +4897,17 @@ static int afe_unmap_cal_data(int32_t cal_type,
goto done;
}
if (cal_block == NULL) {
pr_err("%s: Cal block is NULL!\n",
__func__);
goto done;
}
if (cal_block->map_data.q6map_handle == 0) {
pr_err("%s: Map handle is NULL, nothing to unmap\n",
__func__);
goto done;
}
atomic_set(&this_afe.mem_map_cal_handles[cal_index],
cal_block->map_data.q6map_handle);