ASoC: soc-cache: dereferencing before checking
authorDan Carpenter <error27@gmail.com>
Mon, 7 Feb 2011 19:01:41 +0000 (22:01 +0300)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 8 Feb 2011 11:27:45 +0000 (11:27 +0000)
The patch c358e640a66 "ASoC: soc-cache: Add trace event for
snd_soc_cache_sync()" introduced a dereference of "codec->cache_ops"
before we had checked it for NULL.

I pulled the check forward, and then pulled everything in an indent
level.

Signed-off-by: Dan Carpenter <error27@gmail.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/soc-cache.c

index db66dc4..5d76da4 100644 (file)
@@ -1609,24 +1609,23 @@ int snd_soc_cache_sync(struct snd_soc_codec *codec)
                return 0;
        }
 
+       if (!codec->cache_ops || !codec->cache_ops->sync)
+               return -EINVAL;
+
        if (codec->cache_ops->name)
                name = codec->cache_ops->name;
        else
                name = "unknown";
 
-       if (codec->cache_ops && codec->cache_ops->sync) {
-               if (codec->cache_ops->name)
-                       dev_dbg(codec->dev, "Syncing %s cache for %s codec\n",
-                               codec->cache_ops->name, codec->name);
-               trace_snd_soc_cache_sync(codec, name, "start");
-               ret = codec->cache_ops->sync(codec);
-               if (!ret)
-                       codec->cache_sync = 0;
-               trace_snd_soc_cache_sync(codec, name, "end");
-               return ret;
-       }
-
-       return -EINVAL;
+       if (codec->cache_ops->name)
+               dev_dbg(codec->dev, "Syncing %s cache for %s codec\n",
+                       codec->cache_ops->name, codec->name);
+       trace_snd_soc_cache_sync(codec, name, "start");
+       ret = codec->cache_ops->sync(codec);
+       if (!ret)
+               codec->cache_sync = 0;
+       trace_snd_soc_cache_sync(codec, name, "end");
+       return ret;
 }
 EXPORT_SYMBOL_GPL(snd_soc_cache_sync);