mtk_vcodec_enc_ctrls_setup() can fail after creating some controls. On that error, fops_vcodec_open() jumps past the control handler cleanup and frees the context, leaking the handler's controls and allocation. Use the same control handler cleanup as the later m2m context creation failure, and remove the now-unused label. No m2m context is released on this path because its initialization has not been attempted yet. Fixes: 4e855a6efa54 ("[media] vcodec: mediatek: Add Mediatek V4L2 Video Encoder Driver") Cc: stable@vger.kernel.org Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex Signed-off-by: Wentao Liang --- .../platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.c b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.c index 4e4541b2fc8e..dd47feea6acd 100644 --- a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.c +++ b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.c @@ -140,7 +140,7 @@ static int fops_vcodec_open(struct file *file) ret = mtk_vcodec_enc_ctrls_setup(ctx); if (ret) { mtk_v4l2_venc_err(ctx, "Failed to setup controls() (%d)", ret); - goto err_ctrls_setup; + goto err_m2m_ctx_init; } ctx->m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev_enc, ctx, &mtk_vcodec_enc_queue_init); @@ -191,7 +191,6 @@ static int fops_vcodec_open(struct file *file) v4l2_m2m_ctx_release(ctx->m2m_ctx); err_m2m_ctx_init: v4l2_ctrl_handler_free(&ctx->ctrl_hdl); -err_ctrls_setup: v4l2_fh_del(&ctx->fh, file); v4l2_fh_exit(&ctx->fh); kfree(ctx); -- 2.34.1