diff options
author | Ming Qian <ming.qian@nxp.com> | 2022-03-14 06:28:55 +0100 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@kernel.org> | 2022-03-18 07:32:40 +0100 |
commit | 47aa866f248c89b319b99ac7b21a0a961ed2264a (patch) | |
tree | 1183f65a5b238050cafc0cd76fc312bbce8f7b89 /drivers | |
parent | a9f7224c67b3357e6585e6ddbcabd0523ca0f39f (diff) | |
download | linux-47aa866f248c89b319b99ac7b21a0a961ed2264a.tar.bz2 |
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 <ming.qian@nxp.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/platform/amphion/vpu_drv.c | 11 |
1 files changed, 9 insertions, 2 deletions
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); |