瀏覽代碼

asoc: msm-pcm: move null ptr check after lock

Null pointer for runtime is checked before acquiring the lock.
By the time, it acquires lock and tries to access private
data runtime may be removed which can lead to null ptr
dereference.

Change-Id: I86ca89bd7dbd765c040bab2a292f62c2d3164140
Signed-off-by: Vikram Panduranga <[email protected]>
Vikram Panduranga 5 年之前
父節點
當前提交
2b0c995899
共有 1 個文件被更改,包括 4 次插入4 次删除
  1. 4 4
      asoc/msm-pcm-q6-v2.c

+ 4 - 4
asoc/msm-pcm-q6-v2.c

@@ -1797,11 +1797,11 @@ static int msm_pcm_chmap_ctl_put(struct snd_kcontrol *kcontrol,
 		}
 	}
 
-	if (!substream->runtime || !rtd)
+	if (!rtd)
 		return 0;
 
 	mutex_lock(&pdata->lock);
-	prtd = substream->runtime->private_data;
+	prtd = substream->runtime ? substream->runtime->private_data : NULL;
 	if (prtd) {
 		prtd->set_channel_map = true;
 			for (i = 0; i < PCM_FORMAT_MAX_NUM_CHANNEL_V8; i++)
@@ -1864,11 +1864,11 @@ static int msm_pcm_chmap_ctl_get(struct snd_kcontrol *kcontrol,
 
 	memset(ucontrol->value.integer.value, 0,
 		sizeof(ucontrol->value.integer.value));
-	if (!substream->runtime || !rtd)
+	if (!rtd)
 		return 0; /* no channels set */
 
 	mutex_lock(&pdata->lock);
-	prtd = substream->runtime->private_data;
+	prtd = substream->runtime ? substream->runtime->private_data : NULL;
 
 	if (prtd && prtd->set_channel_map == true) {
 		for (i = 0; i < PCM_FORMAT_MAX_NUM_CHANNEL_V8; i++)