Skip to contentSkip to conversation

Patch "ASoC: dapm: Lock during userspace access" has been added to the 4.1-stable tree

PATCH [email protected] 1 participant 1 message Aug 14, 2015

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

ASoC: dapm: Lock during userspace access

to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
asoc-dapm-lock-during-userspace-access.patch
and it can be found in the queue-4.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From e50b1e06b79e9d51efbff9627b4dd407184ef43f Mon Sep 17 00:00:00 2001

From: Lars-Peter Clausen <[email protected]>
Date: Mon, 6 Jul 2015 17:01:24 +0200
Subject: ASoC: dapm: Lock during userspace access

From: Lars-Peter Clausen <[email protected]>

commit e50b1e06b79e9d51efbff9627b4dd407184ef43f upstream.

The DAPM lock must be held when accessing the DAPM graph status through sysfs or debugfs, otherwise concurrent changes to the graph can result in undefined behaviour.

---
 sound/soc/soc-dapm.c |    9 +++++++++
 1 file changed, 9 insertions(+)
sound/soc/soc-dapm.c +9 -0
@@ -1811,6 +1811,7 @@ static ssize_t dapm_widget_power_read_fi
 					   size_t count, loff_t *ppos)
 {
 	struct snd_soc_dapm_widget *w = file->private_data;
+	struct snd_soc_card *card = w->dapm->card;
 	char *buf;
 	int in, out;
 	ssize_t ret;
@@ -1820,6 +1821,8 @@ static ssize_t dapm_widget_power_read_fi
 	if (!buf)
 		return -ENOMEM;
 
+	mutex_lock(&card->dapm_mutex);
+
 	/* Supply widgets are not handled by is_connected_{input,output}_ep() */
 	if (w->is_supply) {
 		in = 0;
@@ -1866,6 +1869,8 @@ static ssize_t dapm_widget_power_read_fi
 					p->sink->name);
 	}
 
+	mutex_unlock(&card->dapm_mutex);
+
 	ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
 
 	kfree(buf);
@@ -2140,11 +2145,15 @@ static ssize_t dapm_widget_show(struct d
 	struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev);
 	int i, count = 0;
 
+	mutex_lock(&rtd->card->dapm_mutex);
+
 	for (i = 0; i < rtd->num_codecs; i++) {
 		struct snd_soc_codec *codec = rtd->codec_dais[i]->codec;
 		count += dapm_widget_show_codec(codec, buf + count);
 	}
 
+	mutex_unlock(&rtd->card->dapm_mutex);
+
 	return count;
 }
 

Patches currently in stable-queue which might be from [email protected] are

queue-4.1/asoc-dapm-lock-during-userspace-access.patch queue-4.1/dmaengine-pl330-really-fix-choppy-sound-because-of-wrong-residue-calculation.patch queue-4.1/asoc-dapm-don-t-add-prefix-to-widget-stream-name.patch queue-4.1/asoc-ssm4567-keep-tdm_bclks-in-ssm4567_set_dai_fmt.patch