media: mtk-mdp: Fix error handling in probe function

Add mtk_mdp_unregister_m2m_device() on the error handling path to prevent
resource leak.

Add check for the return value of vpu_get_plat_device() to prevent null
pointer dereference. And vpu_get_plat_device() increases the reference
count of the returned platform device. Add platform_device_put() to
prevent reference leak.

Fixes: c8eb2d7e82 ("[media] media: Add Mediatek MDP Driver")
Cc: stable@vger.kernel.org
Signed-off-by: Haoxiang Li <haoxiang_li2024@163.com>
Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
This commit is contained in:
Haoxiang Li 2025-10-08 16:55:03 +08:00 committed by Hans Verkuil
parent 8beb7e982f
commit 8a8a3232ab

View File

@ -194,11 +194,17 @@ static int mtk_mdp_probe(struct platform_device *pdev)
}
mdp->vpu_dev = vpu_get_plat_device(pdev);
if (!mdp->vpu_dev) {
dev_err(&pdev->dev, "Failed to get vpu device\n");
ret = -ENODEV;
goto err_vpu_get_dev;
}
ret = vpu_wdt_reg_handler(mdp->vpu_dev, mtk_mdp_reset_handler, mdp,
VPU_RST_MDP);
if (ret) {
dev_err(&pdev->dev, "Failed to register reset handler\n");
goto err_m2m_register;
goto err_reg_handler;
}
platform_set_drvdata(pdev, mdp);
@ -206,7 +212,7 @@ static int mtk_mdp_probe(struct platform_device *pdev)
ret = vb2_dma_contig_set_max_seg_size(&pdev->dev, DMA_BIT_MASK(32));
if (ret) {
dev_err(&pdev->dev, "Failed to set vb2 dma mag seg size\n");
goto err_m2m_register;
goto err_reg_handler;
}
pm_runtime_enable(dev);
@ -214,6 +220,12 @@ static int mtk_mdp_probe(struct platform_device *pdev)
return 0;
err_reg_handler:
platform_device_put(mdp->vpu_dev);
err_vpu_get_dev:
mtk_mdp_unregister_m2m_device(mdp);
err_m2m_register:
v4l2_device_unregister(&mdp->v4l2_dev);