FAILED: patch "[PATCH] media: mtk-jpeg: Fix use after free bug due to error path" failed to apply to 5.4-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.4.y
git checkout FETCH_HEAD
git cherry-pick -x 206c857dd17d4d026de85866f1b5f0969f2a109e
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024012656-unaligned-conductor-4ef5@gregkh' --subject-prefix 'PATCH 5.4.y' HEAD^..
Possible dependencies:
206c857dd17d ("media: mtk-jpeg: Fix use after free bug due to error path handling in mtk_jpeg_dec_device_run") 2023a9981111 ("media: platform: rename mediatek/mtk-jpeg/ to mediatek/jpeg/")63fe3d27b226 ("media: platform/*/Kconfig: make manufacturer menus more uniform") f2ab6d3e8c48 ("media: platform: Create vendor/{Makefile,Kconfig} files")8148baabd1c4 ("media: platform: re-structure TI drivers")012e3ca3cb4d ("media: platform: rename omap/ to ti/omap/")ceafdaac46ea ("media: platform: rename omap3isp/ to ti/omap3isp/")d24a170bde65 ("media: platform: rename davinci/ to ti/davinci/")407965e2348e ("media: platform: rename am437x/ to ti/am437x/")e7b8153e2a4f ("media: platform: place stm32/ and sti/ under st/ dir")43ecec16c4fa ("media: platform: rename s5p-mfc/ to samsung/s5p-mfc/")f4104b7851a8 ("media: platform: rename s5p-jpeg/ to samsung/s5p-jpeg/")a7f3b2d32dab ("media: platform: rename s5p-g2d/ to samsung/s5p-g2d/")c1024049033f ("media: platform: rename s3c-camif/ to samsung/s3c-camif/")3bae07d4b44c ("media: platform: rename exynos-gsc/ to samsung/exynos-gsc/")238c84f71120 ("media: platform: rename exynos4-is/ to samsung/exynos4-is/")9b18ef7c9ff4 ("media: platform: rename tegra/vde/ to nvidia/tegra-vde/")574476a7d05d ("media: platform: rename mtk-vpu/ to mediatek/mtk-vpu/")728dc4075acc ("media: platform: rename mtk-vcodec/ to mediatek/mtk-vcodec/")1cb72963fa1e ("media: platform: rename mtk-mdp/ to mediatek/mtk-mdp/")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 206c857dd17d4d026de85866f1b5f0969f2a109e Mon Sep 17 00:00:00 2001
From: Zheng Wang <[email protected]>
Date: Mon, 6 Nov 2023 15:48:10 +0100
Subject: [PATCH] media: mtk-jpeg: Fix use after free bug due to error path
handling in mtk_jpeg_dec_device_run
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 CPU1mtk_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 //useIf 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.
drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c +3 -3
@@ -1020,13 +1020,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,