dmaengine: mmp_pdma: fix reference count leaks in mmp_pdma_probe
authorXin Xiong <xiongx18@fudan.edu.cn>
Sat, 11 Sep 2021 07:05:33 +0000 (15:05 +0800)
committerVinod Koul <vkoul@kernel.org>
Mon, 25 Oct 2021 06:42:58 +0000 (12:12 +0530)
The issue happens in an error handling path. If
of_dma_controller_register() fails, the function simply prints error
messages and returns error code, without decrementing the reference
count of pdev->device incremented earlier by
dma_async_device_register(), which may result in refcount leaks.

Fix it by invoking dma_async_device_unregister() before returning the
error code.

Signed-off-by: Xin Xiong <xiongx18@fudan.edu.cn>
Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn>
Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>
Link: https://lore.kernel.org/r/20210911070533.3114-1-xiongx18@fudan.edu.cn
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/mmp_pdma.c

index 89f1814..a23563c 100644 (file)
@@ -1123,6 +1123,7 @@ static int mmp_pdma_probe(struct platform_device *op)
                                                 mmp_pdma_dma_xlate, pdev);
                if (ret < 0) {
                        dev_err(&op->dev, "of_dma_controller_register failed\n");
+                       dma_async_device_unregister(&pdev->device);
                        return ret;
                }
        }