diff options
author | Revathi Uddaraju <revathiu@codeaurora.org> | 2017-03-23 14:50:00 +0530 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-03-27 21:17:09 -0700 |
commit | 494fafb2557f87beaca829a169370047c6e243d1 (patch) | |
tree | 107bc039e1ba1e50bc35bb319e4b98d23ca5245b /sound/soc | |
parent | f4a611a3af743ebcc087102f176c35eb3ba9c2ba (diff) |
ASoC: msm-lsm-client: cleanup ioctl functions
Fix the issue where copy_from_user interface is not used properly.
Cleanup the ioctl function so that there is no illegal memory access.
Change-Id: Iffe2bbc0d33f365a852bb0974ee5c45ab724214b
Signed-off-by: Revathi Uddaraju <revathiu@codeaurora.org>
Diffstat (limited to 'sound/soc')
-rw-r--r-- | sound/soc/msm/qdsp6v2/msm-lsm-client.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/sound/soc/msm/qdsp6v2/msm-lsm-client.c b/sound/soc/msm/qdsp6v2/msm-lsm-client.c index ec4380036047..109e1a202ff2 100644 --- a/sound/soc/msm/qdsp6v2/msm-lsm-client.c +++ b/sound/soc/msm/qdsp6v2/msm-lsm-client.c @@ -1165,28 +1165,27 @@ static int msm_lsm_ioctl_shared(struct snd_pcm_substream *substream, break; case SNDRV_LSM_SET_FWK_MODE_CONFIG: { - u32 *mode = NULL; + u32 mode; - if (!arg) { - dev_err(rtd->dev, - "%s: Invalid param arg for ioctl %s session %d\n", - __func__, "SNDRV_LSM_SET_FWK_MODE_CONFIG", - prtd->lsm_client->session); - rc = -EINVAL; - break; + if (copy_from_user(&mode, arg, sizeof(mode))) { + dev_err(rtd->dev, "%s: %s: copy_frm_user failed\n", + __func__, "LSM_SET_FWK_MODE_CONFIG"); + return -EFAULT; } - mode = (u32 *)arg; - if (prtd->lsm_client->event_mode == *mode) { + + dev_dbg(rtd->dev, "%s: ioctl %s, enable = %d\n", + __func__, "SNDRV_LSM_SET_FWK_MODE_CONFIG", mode); + if (prtd->lsm_client->event_mode == mode) { dev_dbg(rtd->dev, "%s: mode for %d already set to %d\n", - __func__, prtd->lsm_client->session, *mode); + __func__, prtd->lsm_client->session, mode); rc = 0; } else { dev_dbg(rtd->dev, "%s: Event mode = %d\n", - __func__, *mode); - rc = q6lsm_set_fwk_mode_cfg(prtd->lsm_client, *mode); + __func__, mode); + rc = q6lsm_set_fwk_mode_cfg(prtd->lsm_client, mode); if (!rc) - prtd->lsm_client->event_mode = *mode; + prtd->lsm_client->event_mode = mode; else dev_err(rtd->dev, "%s: set event mode failed %d\n", |