At Tue, 05 Jul 2011 00:12:04 -0700 (PDT), kuninori.morimoto.gx@renesas.com wrote:
Dear Mark, Liam
These are fsi-xxx card name fixup patches. It are needed for current linus tree.
Kuninori Morimoto (3): ASoC: sh: fsi-ak4642: fixup snd_soc_card name ASoC: sh: fsi-da7210: fixup snd_soc_card name ASoC: sh: fsi-hdmi: fixup snd_soc_card name
The name string itself is allowed to contain spaces or other special letters. These are copied to longname and shortname. But the driver_name string isn't, and the problem is to reuse the same string for it.
Since no driver sets driver_name string yet, a better fix would be to keep it empty like the earlier version. The revised patch below.
Takashi
--- From: Takashi Iwai tiwai@suse.de Subject: [PATCH] ASoC: Don't set invalid name string to snd_card->driver field
The snd_card->driver field contains a driver name string, and in general it shouldn't contain space or special letters. The commit 2b39535b9e54888649923beaab443af212b6c0fd changed the string copy from card->name, but the long name string may contain such letters, thus it may still lead to a segfault.
A temporary fix is not to copy the long name string but just keep it empty as the earlier version did.
Reported-by: Kuninori Morimoto kuninori.morimoto.gx@renesas.com Signed-off-by: Takashi Iwai tiwai@suse.de --- sound/soc/soc-core.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index d75043e..b194be0 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -1929,8 +1929,9 @@ static void snd_soc_instantiate_card(struct snd_soc_card *card) "%s", card->name); snprintf(card->snd_card->longname, sizeof(card->snd_card->longname), "%s", card->long_name ? card->long_name : card->name); - snprintf(card->snd_card->driver, sizeof(card->snd_card->driver), - "%s", card->driver_name ? card->driver_name : card->name); + if (card->driver_name) + strlcpy(card->snd_card->driver, card->driver_name, + sizeof(card->snd_card->driver));
if (card->late_probe) { ret = card->late_probe(card);