[PATCH 2/4] media: mediatek: vcodec: fix resource leaks in vdec_msg_queue_init()
Nicolas Dufresne
nicolas.dufresne at collabora.com
Wed Jun 14 08:29:13 PDT 2023
Hi,
Le mercredi 14 juin 2023 à 16:06 +0300, Dan Carpenter a écrit :
> If we encounter any error in the vdec_msg_queue_init() then we need
> to set "msg_queue->wdma_addr.size = 0;". Normally, this is done
> inside the vdec_msg_queue_deinit() function. However, if the
> first call to allocate &msg_queue->wdma_addr fails, then the
> vdec_msg_queue_deinit() function is a no-op. For that situation, just
> set the size to zero explicitly and return.
>
> There were two other error paths which did not clean up before returning.
> Change those error paths to goto mem_alloc_err.
>
> Fixes: b199fe46f35c ("media: mtk-vcodec: Add msg queue feature for lat and core architecture")
> Fixes: 2f5d0aef37c6 ("media: mediatek: vcodec: support stateless AV1 decoder")
> Signed-off-by: Dan Carpenter <dan.carpenter at linaro.org>
This change looks good to me, thanks again for your work.
Reviewed-by: Nicolas Dufresne <nicolas.dufresne at collabora.com>
> ---
> drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
> index 92ac82eb444e..be25d56712d8 100644
> --- a/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
> +++ b/drivers/media/platform/mediatek/vcodec/vdec_msg_queue.c
> @@ -307,6 +307,7 @@ int vdec_msg_queue_init(struct vdec_msg_queue *msg_queue,
> err = mtk_vcodec_mem_alloc(ctx, &msg_queue->wdma_addr);
> if (err) {
> mtk_v4l2_err("failed to allocate wdma_addr buf");
> + msg_queue->wdma_addr.size = 0;
> return -ENOMEM;
> }
> msg_queue->wdma_rptr_addr = msg_queue->wdma_addr.dma_addr;
> @@ -338,14 +339,14 @@ int vdec_msg_queue_init(struct vdec_msg_queue *msg_queue,
> err = mtk_vcodec_mem_alloc(ctx, &lat_buf->rd_mv_addr);
> if (err) {
> mtk_v4l2_err("failed to allocate rd_mv_addr buf[%d]", i);
> - return -ENOMEM;
> + goto mem_alloc_err;
> }
>
> lat_buf->tile_addr.size = VDEC_LAT_TILE_SZ;
> err = mtk_vcodec_mem_alloc(ctx, &lat_buf->tile_addr);
> if (err) {
> mtk_v4l2_err("failed to allocate tile_addr buf[%d]", i);
> - return -ENOMEM;
> + goto mem_alloc_err;
> }
> }
>
More information about the Linux-mediatek
mailing list