From d3f2c2b5a40ff731e38a1e301ce55df4a58c64c3 Mon Sep 17 00:00:00 2001 From: Meng Wang Date: Wed, 18 Dec 2019 14:00:33 +0800 Subject: [PATCH] asoc: lsm: free confidence_levels memory to avoid memory leakage prtd->lsm_client->confidence_levels is allocated in msm_lsm_get_conf_levels and not freed in msm_lsm_set_conf. Make this change to free this memory. Change-Id: I617703b36c13e065fdf995e89121c442b32b08f3 Signed-off-by: Meng Wang --- asoc/msm-lsm-client.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/asoc/msm-lsm-client.c b/asoc/msm-lsm-client.c index 291d5c66572d..d44fd49e1b5e 100644 --- a/asoc/msm-lsm-client.c +++ b/asoc/msm-lsm-client.c @@ -659,6 +659,10 @@ static int msm_lsm_set_conf(struct snd_pcm_substream *substream, "%s: Failed to set min_conf_levels, err = %d\n", __func__, rc); + if (prtd->lsm_client->confidence_levels) { + kfree(prtd->lsm_client->confidence_levels); + prtd->lsm_client->confidence_levels = NULL; + } return rc; } @@ -1055,7 +1059,6 @@ static int msm_lsm_ioctl_shared(struct snd_pcm_substream *substream, struct snd_pcm_runtime *runtime; struct lsm_priv *prtd; struct snd_lsm_detection_params det_params; - uint8_t *confidence_level = NULL; uint32_t max_detection_stages_supported = LSM_MAX_STAGES_PER_SESSION; if (!substream || !substream->private_data) { @@ -1210,12 +1213,12 @@ static int msm_lsm_ioctl_shared(struct snd_pcm_substream *substream, dev_err(rtd->dev, "%s: Register snd Model v2 failed =%d\n", __func__, rc); - kfree(confidence_level); q6lsm_snd_model_buf_free(prtd->lsm_client, &p_info); } - - kfree(prtd->lsm_client->confidence_levels); - prtd->lsm_client->confidence_levels = NULL; + if (prtd->lsm_client->confidence_levels) { + kfree(prtd->lsm_client->confidence_levels); + prtd->lsm_client->confidence_levels = NULL; + } break; } case SNDRV_LSM_SET_PARAMS: @@ -1247,10 +1250,10 @@ static int msm_lsm_ioctl_shared(struct snd_pcm_substream *substream, dev_err(rtd->dev, "%s: Failed to set params, err = %d\n", __func__, rc); - - kfree(prtd->lsm_client->confidence_levels); - prtd->lsm_client->confidence_levels = NULL; - + if (prtd->lsm_client->confidence_levels) { + kfree(prtd->lsm_client->confidence_levels); + prtd->lsm_client->confidence_levels = NULL; + } break; case SNDRV_LSM_DEREG_SND_MODEL: