Skip to content

Commit b3fc99f

Browse files
Haoxiang LiSasha Levin
authored andcommitted
media: mtk-mdp: Fix error handling in probe function
[ Upstream commit 8a8a323 ] 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: c8eb2d7 ("[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> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent d659f72 commit b3fc99f

1 file changed

Lines changed: 14 additions & 2 deletions

File tree

drivers/media/platform/mediatek/mdp/mtk_mdp_core.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,26 +194,38 @@ static int mtk_mdp_probe(struct platform_device *pdev)
194194
}
195195

196196
mdp->vpu_dev = vpu_get_plat_device(pdev);
197+
if (!mdp->vpu_dev) {
198+
dev_err(&pdev->dev, "Failed to get vpu device\n");
199+
ret = -ENODEV;
200+
goto err_vpu_get_dev;
201+
}
202+
197203
ret = vpu_wdt_reg_handler(mdp->vpu_dev, mtk_mdp_reset_handler, mdp,
198204
VPU_RST_MDP);
199205
if (ret) {
200206
dev_err(&pdev->dev, "Failed to register reset handler\n");
201-
goto err_m2m_register;
207+
goto err_reg_handler;
202208
}
203209

204210
platform_set_drvdata(pdev, mdp);
205211

206212
ret = vb2_dma_contig_set_max_seg_size(&pdev->dev, DMA_BIT_MASK(32));
207213
if (ret) {
208214
dev_err(&pdev->dev, "Failed to set vb2 dma mag seg size\n");
209-
goto err_m2m_register;
215+
goto err_reg_handler;
210216
}
211217

212218
pm_runtime_enable(dev);
213219
dev_dbg(dev, "mdp-%d registered successfully\n", mdp->id);
214220

215221
return 0;
216222

223+
err_reg_handler:
224+
platform_device_put(mdp->vpu_dev);
225+
226+
err_vpu_get_dev:
227+
mtk_mdp_unregister_m2m_device(mdp);
228+
217229
err_m2m_register:
218230
v4l2_device_unregister(&mdp->v4l2_dev);
219231

0 commit comments

Comments
 (0)