Commit 8f27c4ab authored by Mengdong Lin's avatar Mengdong Lin Committed by Mark Brown

ASoC: topology: Only use valid names of PCM for the kernel DAI & DAI link

User space may not always set a valid FE DAI driver's name, FE DAI link's
name, stream name or cpu DAI name. In such cases, there are all ZERO in
these name string buffers of a topology PCM object. This patch will only
duplicate valid name strings for kernel FE DAI driver and DAI link when
creating them from topology, and free the name strings when destroying
them.
Signed-off-by: default avatarMengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 55726dc9
...@@ -523,6 +523,7 @@ static void remove_dai(struct snd_soc_component *comp, ...@@ -523,6 +523,7 @@ static void remove_dai(struct snd_soc_component *comp,
if (dobj->ops && dobj->ops->dai_unload) if (dobj->ops && dobj->ops->dai_unload)
dobj->ops->dai_unload(comp, dobj); dobj->ops->dai_unload(comp, dobj);
kfree(dai_drv->name);
list_del(&dobj->list); list_del(&dobj->list);
kfree(dai_drv); kfree(dai_drv);
} }
...@@ -540,6 +541,10 @@ static void remove_link(struct snd_soc_component *comp, ...@@ -540,6 +541,10 @@ static void remove_link(struct snd_soc_component *comp,
if (dobj->ops && dobj->ops->link_unload) if (dobj->ops && dobj->ops->link_unload)
dobj->ops->link_unload(comp, dobj); dobj->ops->link_unload(comp, dobj);
kfree(link->name);
kfree(link->stream_name);
kfree(link->cpu_dai_name);
list_del(&dobj->list); list_del(&dobj->list);
snd_soc_remove_dai_link(comp->card, link); snd_soc_remove_dai_link(comp->card, link);
kfree(link); kfree(link);
...@@ -1638,7 +1643,8 @@ static int soc_tplg_dai_create(struct soc_tplg *tplg, ...@@ -1638,7 +1643,8 @@ static int soc_tplg_dai_create(struct soc_tplg *tplg,
if (dai_drv == NULL) if (dai_drv == NULL)
return -ENOMEM; return -ENOMEM;
dai_drv->name = pcm->dai_name; if (strlen(pcm->dai_name))
dai_drv->name = kstrdup(pcm->dai_name, GFP_KERNEL);
dai_drv->id = pcm->dai_id; dai_drv->id = pcm->dai_id;
if (pcm->playback) { if (pcm->playback) {
...@@ -1681,11 +1687,15 @@ static int soc_tplg_link_create(struct soc_tplg *tplg, ...@@ -1681,11 +1687,15 @@ static int soc_tplg_link_create(struct soc_tplg *tplg,
if (link == NULL) if (link == NULL)
return -ENOMEM; return -ENOMEM;
link->name = pcm->pcm_name; if (strlen(pcm->pcm_name)) {
link->stream_name = pcm->pcm_name; link->name = kstrdup(pcm->pcm_name, GFP_KERNEL);
link->stream_name = kstrdup(pcm->pcm_name, GFP_KERNEL);
}
link->id = pcm->pcm_id; link->id = pcm->pcm_id;
link->cpu_dai_name = pcm->dai_name; if (strlen(pcm->dai_name))
link->cpu_dai_name = kstrdup(pcm->dai_name, GFP_KERNEL);
link->codec_name = "snd-soc-dummy"; link->codec_name = "snd-soc-dummy";
link->codec_dai_name = "snd-soc-dummy-dai"; link->codec_dai_name = "snd-soc-dummy-dai";
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment