media: amphion: cleanup media device if register it fail
authorMing Qian <ming.qian@nxp.com>
Mon, 14 Mar 2022 05:28:55 +0000 (06:28 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Fri, 18 Mar 2022 06:32:40 +0000 (07:32 +0100)
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>
drivers/media/platform/amphion/vpu_drv.c

index f19f823..9d5a507 100644 (file)
@@ -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);