Messages in this thread | | | Date | Fri, 20 Oct 2023 12:32:22 +0200 | Subject | Re: [PATCH] media: mtk-jpeg: Fix use after free bug due to error path handling in mtk_jpeg_dec_device_run | From | Alexandre Mergnat <> |
| |
Reviewed-by: Alexandre Mergnat <amergnat@baylibre.com>
On 20/10/2023 06:07, Zheng Wang wrote: > In mtk_jpeg_probe, &jpeg->job_timeout_work is bound with > mtk_jpeg_job_timeout_work. In mtk_jpeg_dec_device_run, if error happens > in mtk_jpeg_set_dec_dst, it will finally start the worker while mark the > job as finished by invoking v4l2_m2m_job_finish. There are two methods > to trigger the bug. If we remove the module, it which will call > mtk_jpeg_remove to make cleanup. The possible sequence is as follows, > which will cause a use-after-free bug. CPU0 CPU1 mtk_jpeg_dec_... | > start worker | |mtk_jpeg_job_timeout_work mtk_jpeg_remove | > v4l2_m2m_release | kfree(m2m_dev); | | | v4l2_m2m_get_curr_priv | > m2m_dev->curr_ctx //use If we close the file descriptor, which will call > mtk_jpeg_release, it will have a similar sequence. Fix this bug by start > timeout worker only if started jpegdec worker successfully so the > v4l2_m2m_job_finish will only be called on either > mtk_jpeg_job_timeout_work or mtk_jpeg_dec_device_run. This patch also > reverts commit c677d7ae8314 ("media: mtk-jpeg: Fix use after free bug > due to uncanceled work") for this patch also fixed the use-after-free > bug mentioned before. Before mtk_jpeg_remove is invoked, > mtk_jpeg_release must be invoked to close opened files. And it will call > v4l2_m2m_cancel_job to wait for the timeout worker finished so the > canceling in mtk_jpeg_remove is unnecessary.
-- Regards, Alexandre
| |