Patch "media: mtk-jpeg: Fix use after free bug due to error path handling in mtk_jpeg_dec_device_run" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    media: mtk-jpeg: Fix use after free bug due to error path handling in mtk_jpeg_dec_device_run

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     media-mtk-jpeg-fix-use-after-free-bug-due-to-error-p.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 0274220202d1ad2eb270daaba9e29425a4f50222
Author: Zheng Wang <zyytlz.wz@xxxxxxx>
Date:   Mon Nov 6 15:48:10 2023 +0100

    media: mtk-jpeg: Fix use after free bug due to error path handling in mtk_jpeg_dec_device_run
    
    [ Upstream commit 206c857dd17d4d026de85866f1b5f0969f2a109e ]
    
    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 starting timeout worker only if started jpegdec worker
    successfully. Then v4l2_m2m_job_finish will only be called in
    either mtk_jpeg_job_timeout_work or mtk_jpeg_dec_device_run.
    
    Fixes: b2f0d2724ba4 ("[media] vcodec: mediatek: Add Mediatek JPEG Decoder Driver")
    Signed-off-by: Zheng Wang <zyytlz.wz@xxxxxxx>
    Signed-off-by: Dmitry Osipenko <dmitry.osipenko@xxxxxxxxxxxxx>
    Cc: stable@xxxxxxxxxxxxxxx
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
index 36109c324cb6..3519c2252ae8 100644
--- a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
+++ b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
@@ -977,13 +977,13 @@ static void mtk_jpeg_dec_device_run(void *priv)
 	if (ret < 0)
 		goto dec_end;
 
-	schedule_delayed_work(&jpeg->job_timeout_work,
-			      msecs_to_jiffies(MTK_JPEG_HW_TIMEOUT_MSEC));
-
 	mtk_jpeg_set_dec_src(ctx, &src_buf->vb2_buf, &bs);
 	if (mtk_jpeg_set_dec_dst(ctx, &jpeg_src_buf->dec_param, &dst_buf->vb2_buf, &fb))
 		goto dec_end;
 
+	schedule_delayed_work(&jpeg->job_timeout_work,
+			      msecs_to_jiffies(MTK_JPEG_HW_TIMEOUT_MSEC));
+
 	spin_lock_irqsave(&jpeg->hw_lock, flags);
 	mtk_jpeg_dec_reset(jpeg->reg_base);
 	mtk_jpeg_dec_set_config(jpeg->reg_base,




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux