diff options
| author | Vinod Koul <vinod.koul@intel.com> | 2016-05-31 09:39:55 -0400 |
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2016-05-31 09:36:30 -0400 |
| commit | 500e06b9a3f50d3db992eb3b8dc309f695d33f63 (patch) | |
| tree | 467722226e5e3beb5e86e858a1eeff32a053636a | |
| parent | 1a695a905c18548062509178b98bc91e67510864 (diff) | |
ASoC: hdac_hdmi: Fix potential NULL dereference
Static checker warns:
Pointer 'hlink' returned from call to function 'snd_hdac_ext_bus_get_link'
at line may be NULL and will be dereferenced"
So we should always check the return of snd_hdac_ext_bus_get_link() before
referencing the link pointer
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
| -rw-r--r-- | sound/soc/codecs/hdac_hdmi.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/sound/soc/codecs/hdac_hdmi.c b/sound/soc/codecs/hdac_hdmi.c index 181cd3bf0b92..2abb742fc47b 100644 --- a/sound/soc/codecs/hdac_hdmi.c +++ b/sound/soc/codecs/hdac_hdmi.c | |||
| @@ -1474,6 +1474,11 @@ static int hdmi_codec_probe(struct snd_soc_codec *codec) | |||
| 1474 | * exit, we call pm_runtime_suspend() so that will do for us | 1474 | * exit, we call pm_runtime_suspend() so that will do for us |
| 1475 | */ | 1475 | */ |
| 1476 | hlink = snd_hdac_ext_bus_get_link(edev->ebus, dev_name(&edev->hdac.dev)); | 1476 | hlink = snd_hdac_ext_bus_get_link(edev->ebus, dev_name(&edev->hdac.dev)); |
| 1477 | if (!hlink) { | ||
| 1478 | dev_err(&edev->hdac.dev, "hdac link not found\n"); | ||
| 1479 | return -EIO; | ||
| 1480 | } | ||
| 1481 | |||
| 1477 | snd_hdac_ext_bus_link_get(edev->ebus, hlink); | 1482 | snd_hdac_ext_bus_link_get(edev->ebus, hlink); |
| 1478 | 1483 | ||
| 1479 | ret = create_fill_widget_route_map(dapm); | 1484 | ret = create_fill_widget_route_map(dapm); |
| @@ -1634,6 +1639,11 @@ static int hdac_hdmi_dev_probe(struct hdac_ext_device *edev) | |||
| 1634 | 1639 | ||
| 1635 | /* hold the ref while we probe */ | 1640 | /* hold the ref while we probe */ |
| 1636 | hlink = snd_hdac_ext_bus_get_link(edev->ebus, dev_name(&edev->hdac.dev)); | 1641 | hlink = snd_hdac_ext_bus_get_link(edev->ebus, dev_name(&edev->hdac.dev)); |
| 1642 | if (!hlink) { | ||
| 1643 | dev_err(&edev->hdac.dev, "hdac link not found\n"); | ||
| 1644 | return -EIO; | ||
| 1645 | } | ||
| 1646 | |||
| 1637 | snd_hdac_ext_bus_link_get(edev->ebus, hlink); | 1647 | snd_hdac_ext_bus_link_get(edev->ebus, hlink); |
| 1638 | 1648 | ||
| 1639 | hdmi_priv = devm_kzalloc(&codec->dev, sizeof(*hdmi_priv), GFP_KERNEL); | 1649 | hdmi_priv = devm_kzalloc(&codec->dev, sizeof(*hdmi_priv), GFP_KERNEL); |
| @@ -1744,6 +1754,11 @@ static int hdac_hdmi_runtime_suspend(struct device *dev) | |||
| 1744 | } | 1754 | } |
| 1745 | 1755 | ||
| 1746 | hlink = snd_hdac_ext_bus_get_link(ebus, dev_name(dev)); | 1756 | hlink = snd_hdac_ext_bus_get_link(ebus, dev_name(dev)); |
| 1757 | if (!hlink) { | ||
| 1758 | dev_err(dev, "hdac link not found\n"); | ||
| 1759 | return -EIO; | ||
| 1760 | } | ||
| 1761 | |||
| 1747 | snd_hdac_ext_bus_link_put(ebus, hlink); | 1762 | snd_hdac_ext_bus_link_put(ebus, hlink); |
| 1748 | 1763 | ||
| 1749 | return 0; | 1764 | return 0; |
| @@ -1765,6 +1780,11 @@ static int hdac_hdmi_runtime_resume(struct device *dev) | |||
| 1765 | return 0; | 1780 | return 0; |
| 1766 | 1781 | ||
| 1767 | hlink = snd_hdac_ext_bus_get_link(ebus, dev_name(dev)); | 1782 | hlink = snd_hdac_ext_bus_get_link(ebus, dev_name(dev)); |
| 1783 | if (!hlink) { | ||
| 1784 | dev_err(dev, "hdac link not found\n"); | ||
| 1785 | return -EIO; | ||
| 1786 | } | ||
| 1787 | |||
| 1768 | snd_hdac_ext_bus_link_get(ebus, hlink); | 1788 | snd_hdac_ext_bus_link_get(ebus, hlink); |
| 1769 | 1789 | ||
| 1770 | err = snd_hdac_display_power(bus, true); | 1790 | err = snd_hdac_display_power(bus, true); |
