ASoC: wcd934x: check sound card state to avoid pointer dereference
When codec probe is not correctly completed and ADSP SSR happens before sound card is registered, calling SSR callback may result into NULL pointer dereference and kernel panic happens. Check sound card state when calling device_down and post_reset to avoid NULL pointer dereference. Change-Id: I35fd84af51edf45db6fd451dc68dbcaaed11fee7 Signed-off-by: Meng Wang <mengw@codeaurora.org>
Este cometimento está contido em:
@@ -9977,6 +9977,12 @@ static int tavil_device_down(struct wcd9xxx *wcd9xxx)
|
||||
int ret;
|
||||
|
||||
codec = (struct snd_soc_codec *)(wcd9xxx->ssr_priv);
|
||||
if (!codec->component.card) {
|
||||
dev_err(codec->dev, "%s: sound card is not enumerated.\n",
|
||||
__func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
priv = snd_soc_codec_get_drvdata(codec);
|
||||
for (count = 0; count < NUM_CODEC_DAIS; count++)
|
||||
priv->dai[count].bus_down_in_recovery = true;
|
||||
@@ -10027,6 +10033,11 @@ static int tavil_post_reset_cb(struct wcd9xxx *wcd9xxx)
|
||||
struct wcd_mbhc *mbhc;
|
||||
|
||||
codec = (struct snd_soc_codec *)(wcd9xxx->ssr_priv);
|
||||
if (!codec->component.card) {
|
||||
dev_err(codec->dev, "%s: sound card is not enumerated.\n",
|
||||
__func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
tavil = snd_soc_codec_get_drvdata(codec);
|
||||
control = dev_get_drvdata(codec->dev->parent);
|
||||
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador