From cf6e60c32f5f28590e8aba8ce72dc897dc81c7be Mon Sep 17 00:00:00 2001 From: Dhananjay Kumar Date: Wed, 23 Mar 2016 20:51:33 +0530 Subject: [PATCH] ASoC: msm: qdsp6v2: Update set_params to avoid use before set In function msm_compr_set_params few codec parameters are getting used before being updated with values received in the call. Prevent usage of incorrect param values by updating params before they are accessed. CRs-Fixed: 993882 Signed-off-by: Dhananjay Kumar Change-Id: Ia3d3e13d4bd7975a11cbeb96929fb224e8271916 --- sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c b/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c index 849958b3c29f..777466c634ba 100755 --- a/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c +++ b/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c @@ -624,7 +624,8 @@ static int msm_compr_get_partial_drain_delay(int frame_sz, int sample_rate) delay_time_ms = delay_time_ms > PARTIAL_DRAIN_ACK_EARLY_BY_MSEC ? delay_time_ms - PARTIAL_DRAIN_ACK_EARLY_BY_MSEC : 0; - pr_debug("%s: partial drain delay %d\n", __func__, delay_time_ms); + pr_debug("%s: frame_sz %d, sample_rate %d, partial drain delay %d\n", + __func__, frame_sz, sample_rate, delay_time_ms); return delay_time_ms; } @@ -1259,6 +1260,12 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, if (i == num_rates) return -EINVAL; + memcpy(&prtd->codec_param, params, sizeof(struct snd_compr_params)); + /* ToDo: remove duplicates */ + prtd->num_channels = prtd->codec_param.codec.ch_in; + prtd->sample_rate = prtd->codec_param.codec.sample_rate; + pr_debug("%s: sample_rate %d\n", __func__, prtd->sample_rate); + if (prtd->codec_param.codec.compr_passthr >= 0 && prtd->codec_param.codec.compr_passthr <= 2) prtd->compr_passthr = prtd->codec_param.codec.compr_passthr; @@ -1376,12 +1383,6 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, prtd->partial_drain_delay = msm_compr_get_partial_drain_delay(frame_sz, prtd->sample_rate); - memcpy(&prtd->codec_param, params, sizeof(struct snd_compr_params)); - - /* ToDo: remove duplicates */ - prtd->num_channels = prtd->codec_param.codec.ch_in; - prtd->sample_rate = prtd->codec_param.codec.sample_rate; - pr_debug("%s: sample_rate %d\n", __func__, prtd->sample_rate); ret = msm_compr_configure_dsp(cstream); return ret;