From: Ming Qian Date: Mon, 14 Mar 2022 05:28:55 +0000 (+0100) Subject: media: amphion: cleanup media device if register it fail X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=47aa866f248c89b319b99ac7b21a0a961ed2264a;p=users%2Fwilly%2Flinux.git media: amphion: cleanup media device if register it fail there is issue that driver forget to call media_device_cleanup if media_device_register fail, it will led to memory leak. Also driver should check the return value of vpu_add_func. Signed-off-by: Ming Qian Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- diff --git a/drivers/media/platform/amphion/vpu_drv.c b/drivers/media/platform/amphion/vpu_drv.c index f19f823d4b8c..9d5a5075343d 100644 --- a/drivers/media/platform/amphion/vpu_drv.c +++ b/drivers/media/platform/amphion/vpu_drv.c @@ -128,8 +128,12 @@ static int vpu_probe(struct platform_device *pdev) vpu->encoder.function = MEDIA_ENT_F_PROC_VIDEO_ENCODER; vpu->decoder.type = VPU_CORE_TYPE_DEC; vpu->decoder.function = MEDIA_ENT_F_PROC_VIDEO_DECODER; - vpu_add_func(vpu, &vpu->decoder); - vpu_add_func(vpu, &vpu->encoder); + ret = vpu_add_func(vpu, &vpu->decoder); + if (ret) + goto err_add_decoder; + ret = vpu_add_func(vpu, &vpu->encoder); + if (ret) + goto err_add_encoder; ret = media_device_register(&vpu->mdev); if (ret) goto err_vpu_media; @@ -141,7 +145,10 @@ static int vpu_probe(struct platform_device *pdev) err_vpu_media: vpu_remove_func(&vpu->encoder); +err_add_encoder: vpu_remove_func(&vpu->decoder); +err_add_decoder: + media_device_cleanup(&vpu->mdev); v4l2_device_unregister(&vpu->v4l2_dev); err_vpu_deinit: pm_runtime_set_suspended(dev);