diff --git a/drivers/misc/qcom/qdsp6v2/audio_utils.c b/drivers/misc/qcom/qdsp6v2/audio_utils.c index 767579456176431cce253e60a187930b8e4bc53f..f39cfb7de83e6a334ed785f916bb8a7ce1678629 100644 --- a/drivers/misc/qcom/qdsp6v2/audio_utils.c +++ b/drivers/misc/qcom/qdsp6v2/audio_utils.c @@ -23,6 +23,12 @@ #include <asm/ioctls.h> #include "audio_utils.h" +#define MIN_FRAME_SIZE 1536 +#define NUM_FRAMES 5 +#define META_SIZE (sizeof(struct meta_out_dsp)) +#define FRAME_SIZE (1 + ((MIN_FRAME_SIZE + META_SIZE) * NUM_FRAMES)) + + static int audio_in_pause(struct q6audio_in *audio) { int rc; @@ -258,6 +264,11 @@ long audio_in_ioctl(struct file *file, rc = -EINVAL; break; } + if ((cfg.buffer_size > FRAME_SIZE) || + (cfg.buffer_count != FRAME_NUM)) { + rc = -EINVAL; + break; + } audio->str_cfg.buffer_size = cfg.buffer_size; audio->str_cfg.buffer_count = cfg.buffer_count; if (audio->opened) { diff --git a/sound/soc/msm/qdsp6v2/q6asm.c b/sound/soc/msm/qdsp6v2/q6asm.c index 26b96589e40905592465f93b33ae950395e6f74f..194ec99dbdfc96b9bf380df377df0467ef614ffa 100644 --- a/sound/soc/msm/qdsp6v2/q6asm.c +++ b/sound/soc/msm/qdsp6v2/q6asm.c @@ -44,7 +44,7 @@ #define TRUE 0x01 #define FALSE 0x00 - +#define FRAME_NUM (8) /* TODO, combine them together */ static DEFINE_MUTEX(session_lock); struct asm_mmap { @@ -940,6 +940,8 @@ int q6asm_audio_client_buf_alloc(unsigned int dir, pr_debug("%s: buffer already allocated\n", __func__); return 0; } + if (bufcnt != FRAME_NUM) + goto fail; mutex_lock(&ac->cmd_lock); buf = kzalloc(((sizeof(struct audio_buffer))*bufcnt), GFP_KERNEL);