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
This commit is contained in:
Dhananjay Kumar 2016-03-23 20:51:33 +05:30 committed by Jeevan Shriram
parent c4ab23b312
commit cf6e60c32f

View file

@ -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;