[alsa-devel] ALSA become "Segmentation fault" on current linus tree
Liam Girdwood
lrg at ti.com
Tue Jul 5 12:22:33 CEST 2011
On 05/07/11 08:33, Takashi Iwai wrote:
> 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.
>
I can give a little background here, the intention is to allow a single "family" driver to support several different machines. i.e. the Panda, Blaze and SDP4430 are use the same "OMAP4" sound driver, but all have slightly different analog outputs (requiring slightly different userspace alsa-lib/UCM configs).
I do have a patch queued using driver name for OMAP4, but that will be for 3.2.
>
> 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>
Acked-by: Liam Girdwood <lrg at ti.com>
> ---
> 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);
More information about the Alsa-devel
mailing list