summaryrefslogtreecommitdiff
path: root/sound/soc/mediatek/mt8195/mt8195-dai-adda.c
diff options
context:
space:
mode:
authorTrevor Wu <trevor.wu@mediatek.com>2023-03-07 07:09:35 +0300
committerMark Brown <broonie@kernel.org>2023-03-13 17:08:37 +0300
commitff728899065922534d80170685fb807194d6487b (patch)
tree6c92f85855c4ea6d254cbb2535c15ebe68e5beda /sound/soc/mediatek/mt8195/mt8195-dai-adda.c
parent4727d4d775654986913a21c35c7cfaf1ecdafd62 (diff)
downloadlinux-ff728899065922534d80170685fb807194d6487b.tar.xz
ASoC: mediatek: mt8195: add dai id check before accessing array
Coverity shows "afe_priv->dai_priv[dai_id] evaluates to an address that could be at negative offset of an array.". Add dai id check before accessing the array element. This ensures that the offset of an array must be a valid index. Signed-off-by: Trevor Wu <trevor.wu@mediatek.com> Link: https://lore.kernel.org/r/20230307040938.7484-2-trevor.wu@mediatek.com Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/mediatek/mt8195/mt8195-dai-adda.c')
-rw-r--r--sound/soc/mediatek/mt8195/mt8195-dai-adda.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/sound/soc/mediatek/mt8195/mt8195-dai-adda.c b/sound/soc/mediatek/mt8195/mt8195-dai-adda.c
index f04bd1781356..0dd35255066b 100644
--- a/sound/soc/mediatek/mt8195/mt8195-dai-adda.c
+++ b/sound/soc/mediatek/mt8195/mt8195-dai-adda.c
@@ -704,13 +704,18 @@ static int mtk_dai_adda_hw_params(struct snd_pcm_substream *substream,
{
struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
struct mt8195_afe_private *afe_priv = afe->platform_priv;
- struct mtk_dai_adda_priv *adda_priv = afe_priv->dai_priv[dai->id];
+ struct mtk_dai_adda_priv *adda_priv;
unsigned int rate = params_rate(params);
- int id = dai->id;
- int ret = 0;
+ int ret;
+
+ if (dai->id != MT8195_AFE_IO_DL_SRC &&
+ dai->id != MT8195_AFE_IO_UL_SRC1 &&
+ dai->id != MT8195_AFE_IO_UL_SRC2)
+ return -EINVAL;
+ adda_priv = afe_priv->dai_priv[dai->id];
dev_dbg(afe->dev, "%s(), id %d, stream %d, rate %d\n",
- __func__, id, substream->stream, rate);
+ __func__, dai->id, substream->stream, rate);
if (rate > ADDA_HIRES_THRES)
adda_priv->hires_required = 1;
@@ -718,9 +723,9 @@ static int mtk_dai_adda_hw_params(struct snd_pcm_substream *substream,
adda_priv->hires_required = 0;
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
- ret = mtk_dai_da_configure(afe, rate, id);
+ ret = mtk_dai_da_configure(afe, rate, dai->id);
else
- ret = mtk_dai_ad_configure(afe, rate, id);
+ ret = mtk_dai_ad_configure(afe, rate, dai->id);
return ret;
}