mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 10:09:10 +02:00
media: meson: vdec: Fix memory leak in error path of vdec_open
The vdec_open() function previously jumped directly to
err_m2m_release when vdec_init_ctrls() failed, skipping
release of the m2m context. This caused a resource leak.
Fix it by introducing a proper err_m2m_ctx_release label
that calls v4l2_m2m_ctx_release(sess->m2m_ctx) before
releasing the m2m device.
This was identified via kmemleak:
unreferenced object 0xffff0000205d6878 (size 8):
comm "v4l_id", pid 5289, jiffies 4294938580
hex dump (first 8 bytes):
40 d2 49 18 00 00 ff ff @.I.....
backtrace (crc d3204599):
kmemleak_alloc+0xc8/0xf0
__kvmalloc_node_noprof+0x60c/0x850
v4l2_ctrl_handler_init_class+0x1b4/0x2e8 [videodev]
vdec_open+0x1f4/0x788 [meson_vdec]
v4l2_open+0x144/0x460 [videodev]
chrdev_open+0x1ac/0x500
do_dentry_open+0x3f0/0xfe8
vfs_open+0x68/0x320
do_open+0x2d8/0x9a8
path_openat+0x1d0/0x4f0
do_filp_open+0x190/0x380
do_sys_openat2+0xf8/0x1b0
__arm64_sys_openat+0x13c/0x1e8
invoke_syscall+0xdc/0x268
el0_svc_common.constprop.0+0x178/0x258
do_el0_svc+0x4c/0x70
Fixes: 3e7f51bd96 ("media: meson: add v4l2 m2m video decoder driver")
Cc: stable@vger.kernel.org
Signed-off-by: Anand Moon <linux.amoon@gmail.com>
Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
This commit is contained in:
parent
2a1a564ada
commit
940f161f73
|
|
@ -889,7 +889,7 @@ static int vdec_open(struct file *file)
|
|||
|
||||
ret = vdec_init_ctrls(sess);
|
||||
if (ret)
|
||||
goto err_m2m_release;
|
||||
goto err_m2m_ctx_release;
|
||||
|
||||
sess->pixfmt_cap = formats[0].pixfmts_cap[0];
|
||||
sess->fmt_out = &formats[0];
|
||||
|
|
@ -913,6 +913,8 @@ static int vdec_open(struct file *file)
|
|||
|
||||
return 0;
|
||||
|
||||
err_m2m_ctx_release:
|
||||
v4l2_m2m_ctx_release(sess->m2m_ctx);
|
||||
err_m2m_release:
|
||||
v4l2_m2m_release(sess->m2m_dev);
|
||||
err_free_sess:
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user