CVE-2026-46011: media: mtk-jpeg: fix use-after-free in release path due to uncancelled work
In the Linux kernel, the following vulnerability has been resolved:
media: mtk-jpeg: fix use-after-free in release path due to uncancelled work
The mtkjpegrelease() function frees the context structure (ctx) without first cancelling any pending or running work in ctx->jpegwork. This creates a race window where the workqueue callback may still be accessing the context memory after it has been freed.
Race condition:
CPU 0 (release) CPU 1 (workqueue) ---------------- ------------------ close() mtkjpegrelease() mtkjpegencworker() ctx = work->data // accessing ctx
kfree(ctx) // freed! access ctx // UAF!
The work is queued via queuework() during JPEG encode/decode operations (via mtkjpegdevicerun). If the device is closed while work is pending or running, the work handler will access freed memory.
Fix this by calling cancelworksync() BEFORE acquiring the mutex. This ordering is critical: if cancelworksync() is called after mutexlock(), and the work handler also tries to acquire the same mutex, it would cause a deadlock.
Note: The open error path does NOT need cancelworksync() because INITWORK() only initializes the work structure - it does not schedule it. Work is only scheduled later during ioctl operations.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Fixed in 6.6.141.1-1 - Compensating control
In mtk_jpeg_release(), call cancel_work_sync() to cancel pending/running ctx->jpeg_work before acquiring any mutex or freeing the context (ctx). Ensure the ordering is critical: cancel_work_sync() BEFORE mutex_lock() and BEFORE kfree(ctx) so the worker cannot access freed ctx (UAF).