From 7e2bf007843b77d6c3bb568631ad8413cf97726d Mon Sep 17 00:00:00 2001 From: Xiaoyu Ye Date: Wed, 4 Apr 2018 15:24:45 -0700 Subject: [PATCH] asoc: fix error handling logic to avoid potential deadlock IOCTL command "SNDRV_LSM_EVENT_STATUS_V3_32" in msm_lsm_ioctl_compat has an incorrect error handling logic which can cause mutex deadlock. Change this logic to avoid potential mutex deadlock. Change-Id: I19b3509b5d40cff555536e4615132ea8c477d451 Signed-off-by: Xiaoyu Ye --- asoc/msm-lsm-client.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/asoc/msm-lsm-client.c b/asoc/msm-lsm-client.c index 666ad08be74d..c00f5c25cfa2 100644 --- a/asoc/msm-lsm-client.c +++ b/asoc/msm-lsm-client.c @@ -1368,7 +1368,8 @@ static int msm_lsm_ioctl_compat(struct snd_pcm_substream *substream, if (copy_from_user(&userarg32, arg, sizeof(userarg32))) { dev_err(rtd->dev, "%s: err copyuser ioctl %s\n", __func__, "SNDRV_LSM_EVENT_STATUS_V3_32"); - return -EFAULT; + err = -EINVAL; + goto done; } if (userarg32.payload_size > @@ -1376,7 +1377,8 @@ static int msm_lsm_ioctl_compat(struct snd_pcm_substream *substream, pr_err("%s: payload_size %d is invalid, max allowed = %d\n", __func__, userarg32.payload_size, LISTEN_MAX_STATUS_PAYLOAD_SIZE); - return -EINVAL; + err = -EINVAL; + goto done; } size = sizeof(*user) + userarg32.payload_size; @@ -1385,7 +1387,8 @@ static int msm_lsm_ioctl_compat(struct snd_pcm_substream *substream, dev_err(rtd->dev, "%s: Allocation failed event status size %d\n", __func__, size); - return -EFAULT; + err = -ENOMEM; + goto done; } cmd = SNDRV_LSM_EVENT_STATUS_V3; user->payload_size = userarg32.payload_size;