ASoC: fix NULL pointer dereference in soc_suspend()
authorDaniel Mack <daniel@caiaq.de>
Wed, 3 Jun 2009 15:44:49 +0000 (17:44 +0200)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 4 Jun 2009 12:24:08 +0000 (13:24 +0100)
In case the initalization of an soc_device failed, there is no codec
associated with it. soc_suspend() will still dereference the pointer
and cause an Ooops when entering the sleep mode.

This happens on our board with a multi-target kernel image when booted
on a machine without audio circuits.

This patch makes the code bail out very early in this special case.

Signed-off-by: Daniel Mack <daniel@caiaq.de>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/soc-core.c

index 4aa8e2d..3f44150 100644 (file)
@@ -628,6 +628,12 @@ static int soc_suspend(struct platform_device *pdev, pm_message_t state)
        struct snd_soc_codec *codec = card->codec;
        int i;
 
+       /* If the initialization of this soc device failed, there is no codec
+        * associated with it. Just bail out in this case.
+        */
+       if (!codec)
+               return 0;
+
        /* Due to the resume being scheduled into a workqueue we could
        * suspend before that's finished - wait for it to complete.
         */