Commit f2bbf167 authored by Kefeng Wang's avatar Kefeng Wang Committed by Greg Kroah-Hartman

media: vim2m: fix two double-free issues

[ Upstream commit 20059cbb ]

vim2m_device_release() will be called by video_unregister_device() to release
various objects.

There are two double-free issue,
1. dev->m2m_dev will be freed twice in error_m2m path/vim2m_device_release
2. the error_v4l2 and error_free path in vim2m_probe() will release
   same objects, since vim2m_device_release has done.

Fixes: ea6c7e34 ("media: vim2m: replace devm_kzalloc by kzalloc")

Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reported-by: default avatarHulk Robot <hulkci@huawei.com>
Signed-off-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 191e0df4
...@@ -1355,7 +1355,7 @@ static int vim2m_probe(struct platform_device *pdev) ...@@ -1355,7 +1355,7 @@ static int vim2m_probe(struct platform_device *pdev)
MEDIA_ENT_F_PROC_VIDEO_SCALER); MEDIA_ENT_F_PROC_VIDEO_SCALER);
if (ret) { if (ret) {
v4l2_err(&dev->v4l2_dev, "Failed to init mem2mem media controller\n"); v4l2_err(&dev->v4l2_dev, "Failed to init mem2mem media controller\n");
goto error_m2m; goto error_dev;
} }
ret = media_device_register(&dev->mdev); ret = media_device_register(&dev->mdev);
...@@ -1369,11 +1369,11 @@ static int vim2m_probe(struct platform_device *pdev) ...@@ -1369,11 +1369,11 @@ static int vim2m_probe(struct platform_device *pdev)
#ifdef CONFIG_MEDIA_CONTROLLER #ifdef CONFIG_MEDIA_CONTROLLER
error_m2m_mc: error_m2m_mc:
v4l2_m2m_unregister_media_controller(dev->m2m_dev); v4l2_m2m_unregister_media_controller(dev->m2m_dev);
error_m2m:
v4l2_m2m_release(dev->m2m_dev);
#endif #endif
error_dev: error_dev:
video_unregister_device(&dev->vfd); video_unregister_device(&dev->vfd);
/* vim2m_device_release called by video_unregister_device to release various objects */
return ret;
error_v4l2: error_v4l2:
v4l2_device_unregister(&dev->v4l2_dev); v4l2_device_unregister(&dev->v4l2_dev);
error_free: error_free:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment