It looks like the .card member of the snd_soc_pcm_runtime structure pointed to by the snd_soc_dai_link.init() argument is no longer initialized before the function being called. As the Amstrad Delta sound card driver was making use of it for locating its snd_soc_card structure, this resulted in actual or potential NULL pointer dereferences.
Since the structure in question is local to the driver, its address can be referred directly instead of trying to derive it from the function argument. Fix it.
Created and tested against linux-2.6.38-rc2
Signed-off-by: Janusz Krzysztofik jkrzyszt@tis.icnet.pl --- Please consider queuing this patch for the current rc cycle.
sound/soc/omap/ams-delta.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
--- git/sound/soc/omap/ams-delta.c.orig 2011-01-31 19:49:29.000000000 +0100 +++ git/sound/soc/omap/ams-delta.c 2011-02-01 17:54:22.000000000 +0100 @@ -492,12 +492,14 @@ static void ams_delta_shutdown(struct sn * Card initialization */
+static struct snd_soc_card ams_delta_audio_card; + static int ams_delta_cx20442_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; struct snd_soc_dai *codec_dai = rtd->codec_dai; - struct snd_soc_card *card = rtd->card; + struct snd_soc_card *card = &ams_delta_audio_card; int ret; /* Codec is ready, now add/activate board specific controls */