On Tue Nov 11 14:57:06 2025 +0000, Zilin Guan wrote:
> In wave5_vpu_open_enc() and wave5_vpu_open_dec(), a vpu instance is
> allocated via kzalloc(). If the subsequent allocation for inst->codec_info
> fails, the functions return -ENOMEM without freeing the previously
> allocated instance, causing a memory leak.
> 
> Fix this by calling kfree() on the instance in this error path to ensure
> it is properly released.
> 
> Fixes: 9707a6254a8a6 ("media: chips-media: wave5: Add the v4l2 layer")
> Signed-off-by: Zilin Guan <[email protected]>
> Signed-off-by: Nicolas Dufresne <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c | 4 +++-
 drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

---

diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c 
b/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c
index e75770912e21..8917542b993c 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c
+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c
@@ -1835,8 +1835,10 @@ static int wave5_vpu_open_dec(struct file *filp)
        INIT_LIST_HEAD(&inst->avail_src_bufs);
 
        inst->codec_info = kzalloc(sizeof(*inst->codec_info), GFP_KERNEL);
-       if (!inst->codec_info)
+       if (!inst->codec_info) {
+               kfree(inst);
                return -ENOMEM;
+       }
 
        v4l2_fh_init(&inst->v4l2_fh, vdev);
        v4l2_fh_add(&inst->v4l2_fh, filp);
diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c 
b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
index e69bef5d1b52..24fc0d0d3f4a 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
@@ -1581,8 +1581,10 @@ static int wave5_vpu_open_enc(struct file *filp)
        inst->ops = &wave5_vpu_enc_inst_ops;
 
        inst->codec_info = kzalloc(sizeof(*inst->codec_info), GFP_KERNEL);
-       if (!inst->codec_info)
+       if (!inst->codec_info) {
+               kfree(inst);
                return -ENOMEM;
+       }
 
        v4l2_fh_init(&inst->v4l2_fh, vdev);
        v4l2_fh_add(&inst->v4l2_fh, filp);
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to