From 8e815fed8b57fc9b62386e42d01bcfc5b327f09b Mon Sep 17 00:00:00 2001 From: Sudheer Papothi Date: Tue, 21 Apr 2020 04:32:59 +0530 Subject: [PATCH] ASoC: wsa883x: Check for dereference before access Check for valid pointer before access in wsa883x driver to avoid dereference. Change-Id: I1c7c158063d178b489ea1e71be745ed3ca32fb16 Signed-off-by: Sudheer Papothi --- asoc/codecs/wsa883x/wsa883x.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/asoc/codecs/wsa883x/wsa883x.c b/asoc/codecs/wsa883x/wsa883x.c index 6bf5c7649d16..8fe246b009ad 100644 --- a/asoc/codecs/wsa883x/wsa883x.c +++ b/asoc/codecs/wsa883x/wsa883x.c @@ -1587,6 +1587,11 @@ static int wsa883x_swr_probe(struct swr_device *pdev) wsa883x->wsa883x_name_prefix = kstrndup(wsa883x_name_prefix_of, strlen(wsa883x_name_prefix_of), GFP_KERNEL); component = snd_soc_lookup_component(&pdev->dev, wsa883x->driver->name); + if (!component) { + dev_err(&pdev->dev, "%s: component is NULL \n", __func__); + ret = -EINVAL; + goto err_mem; + } component->name_prefix = wsa883x->wsa883x_name_prefix; wsa883x->parent_np = of_parse_phandle(pdev->dev.of_node, @@ -1654,10 +1659,16 @@ static int wsa883x_swr_probe(struct swr_device *pdev) return 0; err_mem: - if (wsa883x->dai_driver) + kfree(wsa883x->wsa883x_name_prefix); + if (wsa883x->dai_driver) { + kfree(wsa883x->dai_driver->name); + kfree(wsa883x->dai_driver->playback.stream_name); kfree(wsa883x->dai_driver); - if (wsa883x->driver) + } + if (wsa883x->driver) { + kfree(wsa883x->driver->name); kfree(wsa883x->driver); + } err_irq: wcd_free_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_SAF2WAR, NULL); wcd_free_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_WAR2SAF, NULL); @@ -1709,13 +1720,15 @@ static int wsa883x_swr_remove(struct swr_device *pdev) mutex_destroy(&wsa883x->res_lock); snd_soc_unregister_component(&pdev->dev); kfree(wsa883x->wsa883x_name_prefix); - kfree(wsa883x->driver->name); - kfree(wsa883x->dai_driver->name); - kfree(wsa883x->dai_driver->playback.stream_name); - if (wsa883x->dai_driver) + if (wsa883x->dai_driver) { + kfree(wsa883x->dai_driver->name); + kfree(wsa883x->dai_driver->playback.stream_name); kfree(wsa883x->dai_driver); - if (wsa883x->driver) + } + if (wsa883x->driver) { + kfree(wsa883x->driver->name); kfree(wsa883x->driver); + } swr_set_dev_data(pdev, NULL); return 0; }