if (dobj->ops && dobj->ops->dai_unload)
                dobj->ops->dai_unload(comp, dobj);
 
+       kfree(dai_drv->name);
        list_del(&dobj->list);
        kfree(dai_drv);
 }
        if (dobj->ops && dobj->ops->link_unload)
                dobj->ops->link_unload(comp, dobj);
 
+       kfree(link->name);
+       kfree(link->stream_name);
+       kfree(link->cpu_dai_name);
+
        list_del(&dobj->list);
        snd_soc_remove_dai_link(comp->card, link);
        kfree(link);
        if (dai_drv == NULL)
                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;
 
        if (pcm->playback) {
        if (link == NULL)
                return -ENOMEM;
 
-       link->name = pcm->pcm_name;
-       link->stream_name = pcm->pcm_name;
+       if (strlen(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->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_dai_name = "snd-soc-dummy-dai";