diff options
author | Daniel Mack <daniel@caiaq.de> | 2009-06-03 17:44:49 +0200 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2009-06-04 13:24:08 +0100 |
commit | e3509ff0fb9df53e45cd68488e3b463a80455db7 (patch) | |
tree | 9d13f9747af6107ca194e1be142db2a7041f5c18 /sound/soc/soc-core.c | |
parent | d08664fdb50795b29cf70b0269ea02f7248e76c3 (diff) | |
download | lwn-e3509ff0fb9df53e45cd68488e3b463a80455db7.tar.gz lwn-e3509ff0fb9df53e45cd68488e3b463a80455db7.zip |
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>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/soc-core.c')
-rw-r--r-- | 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 4aa8e2d35061..3f44150d8e30 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -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. */ |