[alsa-devel] ALSA become "Segmentation fault" on current linus tree
Takashi Iwai
tiwai at suse.de
Tue Jul 5 09:33:14 CEST 2011
At Tue, 05 Jul 2011 00:12:04 -0700 (PDT),
kuninori.morimoto.gx at 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 at 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 at renesas.com>
Signed-off-by: Takashi Iwai <tiwai at 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);
--
1.7.6
More information about the Alsa-devel
mailing list