mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
media: mtk-jpeg: cancel workqueue on release for supported platforms only
Since a recent fix the mtk_jpeg_release function cancels any pending
or running work present in the driver workqueue using
cancel_work_sync function.
Currently, only the multicore based variants use this workqueue and they
have the jpeg_worker platform data field initialized with a workqueue
callback function. For the others, this field value remain NULL by
default.
The cancel_work_sync function is unconditionally called in
mtk_jpeg_release function, even for the variants that do not use the
workqueue. This call generates a WARN_ON print in __flush_work because
the workqueue callback function presence check fails in __flush_work
function (used by cancel_work_sync).
So, to avoid these warnings, call cancel_work_sync only if a workqueue
callback is defined in platform data.
Fixes: 34c519feef ("media: mtk-jpeg: fix use-after-free in release path due to uncancelled work")
Cc: stable@vger.kernel.org
Signed-off-by: Louis-Alexis Eyraud <louisalexis.eyraud@collabora.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.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
018f2dc3a4
commit
b1845a227f
|
|
@ -1202,7 +1202,8 @@ static int mtk_jpeg_release(struct file *file)
|
|||
struct mtk_jpeg_dev *jpeg = video_drvdata(file);
|
||||
struct mtk_jpeg_ctx *ctx = mtk_jpeg_file_to_ctx(file);
|
||||
|
||||
cancel_work_sync(&ctx->jpeg_work);
|
||||
if (jpeg->variant->jpeg_worker)
|
||||
cancel_work_sync(&ctx->jpeg_work);
|
||||
mutex_lock(&jpeg->lock);
|
||||
v4l2_m2m_ctx_release(ctx->fh.m2m_ctx);
|
||||
v4l2_ctrl_handler_free(&ctx->ctrl_hdl);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user