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:
parent
1f64cd2458
commit
1b377a2e0a
|
@ -19,6 +19,8 @@
|
||||||
#include <linux/ratelimit.h>
|
#include <linux/ratelimit.h>
|
||||||
#include <sound/audio_cal_utils.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)
|
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,
|
cal_block = list_entry(ptr,
|
||||||
struct cal_block_data, list);
|
struct cal_block_data, list);
|
||||||
|
|
||||||
if (cal_type->info.cal_util_callbacks.unmap_cal != NULL) {
|
ret = unmap_memory(cal_type, cal_block);
|
||||||
ret = cal_type->info.cal_util_callbacks.
|
if (ret < 0) {
|
||||||
unmap_cal(cal_type->info.reg.cal_type,
|
pr_err("%s: unmap_memory failed, cal type %d, ret = %d!\n",
|
||||||
cal_block);
|
__func__,
|
||||||
if (ret < 0) {
|
cal_type->info.reg.cal_type,
|
||||||
pr_err("%s: unmap_cal failed, cal type %d, ret = %d!\n",
|
ret);
|
||||||
__func__,
|
|
||||||
cal_type->info.reg.cal_type,
|
|
||||||
ret);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
delete_cal_block(cal_block);
|
delete_cal_block(cal_block);
|
||||||
cal_block = NULL;
|
cal_block = NULL;
|
||||||
|
|
|
@ -2779,6 +2779,18 @@ static int adm_unmap_cal_data(int32_t cal_type,
|
||||||
goto done;
|
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],
|
atomic_set(&this_adm.mem_map_handles[cal_index],
|
||||||
cal_block->map_data.q6map_handle);
|
cal_block->map_data.q6map_handle);
|
||||||
atomic_set(&this_adm.mem_map_index, cal_index);
|
atomic_set(&this_adm.mem_map_index, cal_index);
|
||||||
|
|
|
@ -4897,6 +4897,17 @@ static int afe_unmap_cal_data(int32_t cal_type,
|
||||||
goto done;
|
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],
|
atomic_set(&this_afe.mem_map_cal_handles[cal_index],
|
||||||
cal_block->map_data.q6map_handle);
|
cal_block->map_data.q6map_handle);
|
||||||
|
|
Loading…
Reference in New Issue