CVE-2026-99095: drm/vc4: drain the hangcheck timer and works on V3D unbind
In the Linux kernel, the following vulnerability has been resolved:
drm/vc4: drain the hangcheck timer and works on V3D unbind
Nothing stops the hangcheck timer that submitted jobs arm, or the jobdonework that the render-done interrupt queues, at teardown: vc4irqdisable() cancels only overflowmemwork, and vc4gemdestroy() runs from the drm-managed release, after vc4v3dunbind() has already uninstalled the V3D interrupt and cleared vc4->v3d. A timer still armed by then reads V3D registers through the NULL vc4->v3d pointer, and the late callbacks run on the vc4dev embedding them after it has been freed.
Drain them in vc4v3dunbind(): shut the timer down and cancel resetwork before the interrupt is taken down, because its vc4irqreset() re-enables it, then flush jobdonework so that completions queued at teardown still release their jobs.
This issue was found by an in-house static analysis tool.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Compensating control
In vc4_v3d_unbind(), shut down and cancel the hangcheck timer before clearing the vc4->v3d pointer.
- Compensating control
During V3D teardown, cancel overflow_mem_work and flush job_done_work before the V3D interrupt is uninstalled, so queued callbacks cannot run after vc4_v3d_unbind().