[alsa-devel] [PATCH] ALSA: ASoC: fix NULL pointer dereference in soc_suspend()
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 Cc: Mark Brown broonie@opensource.wolfsonmicro.com --- sound/soc/soc-core.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 1cd149b..4545a15 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -632,6 +632,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. */
On Wed, Jun 03, 2009 at 05:44:49PM +0200, Daniel Mack wrote:
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.
A better fix would be to stop the device registering at all if the initialsation fails but that's a bit more involved and in the meantime this makes the situation better. Probably best to wait for the real fix until multiple cards are supported.
Thanks, I've applied this.
participants (2)
-
Daniel Mack
-
Mark Brown