[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <b372ef8c-7f3f-483b-8cc2-d927a60050be@baylibre.com>
Date: Fri, 20 Oct 2023 12:32:22 +0200
From: Alexandre Mergnat <amergnat@...libre.com>
To: Zheng Wang <zyytlz.wz@....com>, dmitry.osipenko@...labora.com
Cc: Kyrie.Wu@...iatek.com, bin.liu@...iatek.com, mchehab@...nel.org,
matthias.bgg@...il.com, angelogioacchino.delregno@...labora.com,
linux-media@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org,
linux-mediatek@...ts.infradead.org, Irui.Wang@...iatek.com,
security@...nel.org, hackerzheng666@...il.com,
1395428693sheep@...il.com, alex000young@...il.com,
wenst@...omium.org, stable@...r.kernel.org
Subject: Re: [PATCH] media: mtk-jpeg: Fix use after free bug due to error path
handling in mtk_jpeg_dec_device_run
Reviewed-by: Alexandre Mergnat <amergnat@...libre.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
Powered by blists - more mailing lists