diff options
author | Gustavo A. R. Silva <gustavo@embeddedor.com> | 2019-01-14 18:40:10 -0500 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2019-01-15 14:06:23 -0500 |
commit | 4cb79ef9c6c4413427cd70afbb1f3bc01e9b7abf (patch) | |
tree | 22a94f05834a65bd8fca01cf2d087c0204339366 /sound/soc/amd | |
parent | c407cd008fd039320d147088b52d0fa34ed3ddcb (diff) |
ASoC: amd: Fix potential NULL pointer dereference
Check return value from call to devm_kzalloc() in order to prevent a
potential NULL pointer dereference.
Also, notice that it makes no sense to allocate any resources if
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); fails,
so move the call to devm_kzalloc() below the mentioned code.
Lastly, improve the use of sizeof in the call to devm_kzalloc() by
changing it from sizeof(struct i2s_dev_data) to sizeof(*adata)
This issue was detected with the help of Coccinelle.
Fixes: ac289c7ec0bc ("ASoC: amd: add ACP3x PCM platform driver")
Cc: stable@vger.kernel.org
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/amd')
-rw-r--r-- | sound/soc/amd/raven/acp3x-pcm-dma.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sound/soc/amd/raven/acp3x-pcm-dma.c b/sound/soc/amd/raven/acp3x-pcm-dma.c index 022a8912c8a2..3d58338fa3cf 100644 --- a/sound/soc/amd/raven/acp3x-pcm-dma.c +++ b/sound/soc/amd/raven/acp3x-pcm-dma.c | |||
@@ -611,14 +611,16 @@ static int acp3x_audio_probe(struct platform_device *pdev) | |||
611 | } | 611 | } |
612 | irqflags = *((unsigned int *)(pdev->dev.platform_data)); | 612 | irqflags = *((unsigned int *)(pdev->dev.platform_data)); |
613 | 613 | ||
614 | adata = devm_kzalloc(&pdev->dev, sizeof(struct i2s_dev_data), | ||
615 | GFP_KERNEL); | ||
616 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 614 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
617 | if (!res) { | 615 | if (!res) { |
618 | dev_err(&pdev->dev, "IORESOURCE_IRQ FAILED\n"); | 616 | dev_err(&pdev->dev, "IORESOURCE_IRQ FAILED\n"); |
619 | return -ENODEV; | 617 | return -ENODEV; |
620 | } | 618 | } |
621 | 619 | ||
620 | adata = devm_kzalloc(&pdev->dev, sizeof(*adata), GFP_KERNEL); | ||
621 | if (!adata) | ||
622 | return -ENOMEM; | ||
623 | |||
622 | adata->acp3x_base = devm_ioremap(&pdev->dev, res->start, | 624 | adata->acp3x_base = devm_ioremap(&pdev->dev, res->start, |
623 | resource_size(res)); | 625 | resource_size(res)); |
624 | 626 | ||