--- /dev/null
+From e4ad1accb28d0ed8cea6f12395d58686ad344ca7 Mon Sep 17 00:00:00 2001
+From: Patrick Lai <plai@codeaurora.org>
+Date: Sun, 2 Mar 2014 11:52:57 -0800
+Subject: ASoC: pcm: free path list before exiting from error conditions
+
+From: Patrick Lai <plai@codeaurora.org>
+
+commit e4ad1accb28d0ed8cea6f12395d58686ad344ca7 upstream.
+
+dpcm_path_get() allocates dynamic memory to hold path list.
+Corresponding dpcm_path_put() must be called to free the memory.
+dpcm_path_put() is not called under several error conditions.
+This leads to memory leak.
+
+Signed-off-by: Patrick Lai <plai@codeaurora.org>
+Signed-off-by: Mark Brown <broonie@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/soc/soc-pcm.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/sound/soc/soc-pcm.c
++++ b/sound/soc/soc-pcm.c
+@@ -1864,6 +1864,7 @@ int soc_dpcm_runtime_update(struct snd_s
+
+ paths = dpcm_path_get(fe, SNDRV_PCM_STREAM_PLAYBACK, &list);
+ if (paths < 0) {
++ dpcm_path_put(&list);
+ dev_warn(fe->dev, "ASoC: %s no valid %s path\n",
+ fe->dai_link->name, "playback");
+ mutex_unlock(&card->mutex);
+@@ -1893,6 +1894,7 @@ capture:
+
+ paths = dpcm_path_get(fe, SNDRV_PCM_STREAM_CAPTURE, &list);
+ if (paths < 0) {
++ dpcm_path_put(&list);
+ dev_warn(fe->dev, "ASoC: %s no valid %s path\n",
+ fe->dai_link->name, "capture");
+ mutex_unlock(&card->mutex);
+@@ -1957,6 +1959,7 @@ static int dpcm_fe_dai_open(struct snd_p
+ fe->dpcm[stream].runtime = fe_substream->runtime;
+
+ if (dpcm_path_get(fe, stream, &list) <= 0) {
++ dpcm_path_put(&list);
+ dev_dbg(fe->dev, "ASoC: %s no valid %s route\n",
+ fe->dai_link->name, stream ? "capture" : "playback");
+ }