ASoC: topology: Check name strings of physical DAI links
authorMengdong Lin <mengdong.lin@linux.intel.com>
Sat, 5 Nov 2016 00:42:14 +0000 (08:42 +0800)
committerMark Brown <broonie@kernel.org>
Wed, 9 Nov 2016 14:46:04 +0000 (14:46 +0000)
Check if the name strings are properly terminated, and only use valid
name strings to find existing physical DAI links to configure.

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-topology.c

index 8772fd994e82b6f17c9903a6a71d15080c20a10e..4dfdc656cce64905be4febe1cffbf9b8ec950caa 100644 (file)
@@ -1994,10 +1994,24 @@ static int soc_tplg_link_config(struct soc_tplg *tplg,
 {
        struct snd_soc_dai_link *link;
        const char *name, *stream_name;
+       size_t len;
        int ret;
 
-       name = strlen(cfg->name) ? cfg->name : NULL;
-       stream_name = strlen(cfg->stream_name) ? cfg->stream_name : NULL;
+       len = strnlen(cfg->name, SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
+       if (len == SNDRV_CTL_ELEM_ID_NAME_MAXLEN)
+               return -EINVAL;
+       else if (len)
+               name = cfg->name;
+       else
+               name = NULL;
+
+       len = strnlen(cfg->stream_name, SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
+       if (len == SNDRV_CTL_ELEM_ID_NAME_MAXLEN)
+               return -EINVAL;
+       else if (len)
+               stream_name = cfg->stream_name;
+       else
+               stream_name = NULL;
 
        link = snd_soc_find_dai_link(tplg->comp->card, cfg->id,
                                     name, stream_name);