Re: [PATCH] media: s5p-mfc: use timer_shutdown_sync() for the self-rearming watchdog

Marek Szyprowski <[email protected]>
Newsgroups org.kernel.vger.stable,org.kernel.vger.linux-kernel,org.kernel.vger.linux-media
Message-ID <[email protected]>
On 30.07.2026 09:15, Fan Wu wrote:
> The MFC watchdog timer (s5p_mfc_watchdog) is self-rearming: every
> callback re-arms itself with add_timer() and, on a timeout, schedules
> watchdog_work. s5p_mfc_remove() tears this down with timer_delete_sync()
> followed by flush_work().
>
> timer_delete_sync() dequeues the timer and waits for a callback that is
> already running, but it does not prevent a subsequent re-arm. Because the
> watchdog callback re-arms via add_timer(), this is the wrong shutdown
> primitive: once the wait returns nothing guarantees a just-queued re-arm
> will not fire later, dereferencing dev (clock on/off, deinit_hw,
> load_firmware, init_hw) after video_unregister_device(), DMA teardown and
> s5p_mfc_final_pm() have run, a potential use-after-free.
>
> Use timer_shutdown_sync(), which puts the timer into a shutdown state so
> that any add_timer()/mod_timer() from the callback becomes a no-op and no
> later firing is possible. Switch flush_work() to cancel_work_sync() so any
> watchdog_work that was already queued before the timer was stopped is
> cancelled rather than allowed to run to completion against the torn-down
> device.
>
> This issue was found by an in-house static analysis tool. No runtime
> reproducer is available.
>
> Fixes: af9357467810 ("[media] MFC: Add MFC 5.1 V4L2 driver")
> Cc: [email protected]
> Cc: Marek Szyprowski <[email protected]>
> Cc: Andrzej Hajda <[email protected]>
> Cc: Mauro Carvalho Chehab <[email protected]>
> Assisted-by: Codex:gpt-5.6
> Signed-off-by: Fan Wu <[email protected]>
Reviewed-by: Marek Szyprowski <[email protected]>
> ---
>  drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c
> index 32eb402d439c..03e7eac8d1f7 100644
> --- a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c
> +++ b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c
> @@ -1474,8 +1474,8 @@ static void s5p_mfc_remove(struct platform_device *pdev)
>  	}
>  	mutex_unlock(&dev->mfc_mutex);
>  
> -	timer_delete_sync(&dev->watchdog_timer);
> -	flush_work(&dev->watchdog_work);
> +	timer_shutdown_sync(&dev->watchdog_timer);
> +	cancel_work_sync(&dev->watchdog_work);
>  
>  	video_unregister_device(dev->vfd_enc);
>  	video_unregister_device(dev->vfd_dec);

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.