ASoC: core: Fix possible NULL pointer dereference
authorTushar Behera <tushar.b@samsung.com>
Fri, 4 Jul 2014 08:53:00 +0000 (14:23 +0530)
committerMark Brown <broonie@linaro.org>
Wed, 9 Jul 2014 08:06:46 +0000 (10:06 +0200)
snd_soc_of_parse_card_name() may be called before card->dev has been
set, which results in a kernel panic.

Unable to handle kernel NULL pointer dereference at virtual address 00000210
PC is at snd_soc_of_parse_card_name+0x18/0x54
LR is at snow_probe+0x5c/0xd4

Add an error check in snd_soc_of_parse_card_name() to take care of this
case and print out a message in case of error.

Signed-off-by: Tushar Behera <tushar.b@samsung.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/soc-core.c

index b87d7d8..63d1107 100644 (file)
@@ -4420,9 +4420,16 @@ EXPORT_SYMBOL_GPL(snd_soc_unregister_codec);
 int snd_soc_of_parse_card_name(struct snd_soc_card *card,
                               const char *propname)
 {
-       struct device_node *np = card->dev->of_node;
+       struct device_node *np;
        int ret;
 
+       if (!card->dev) {
+               pr_err("card->dev is not set before calling %s\n", __func__);
+               return -EINVAL;
+       }
+
+       np = card->dev->of_node;
+
        ret = of_property_read_string_index(np, propname, 0, &card->name);
        /*
         * EINVAL means the property does not exist. This is fine providing