diff options
author | Dhananjay Kumar <dhakumar@codeaurora.org> | 2016-03-23 20:51:33 +0530 |
---|---|---|
committer | Jeevan Shriram <jshriram@codeaurora.org> | 2016-05-06 12:06:19 -0700 |
commit | cf6e60c32f5f28590e8aba8ce72dc897dc81c7be (patch) | |
tree | 7504e9d245ecc4f954d06084e7e239f971713350 /sound/soc/msm | |
parent | c4ab23b3121d441e4eba746491cb853aaa54540b (diff) |
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 <dhakumar@codeaurora.org>
Change-Id: Ia3d3e13d4bd7975a11cbeb96929fb224e8271916
Diffstat (limited to 'sound/soc/msm')
-rwxr-xr-x | sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c | 15 |
1 files 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; |