CVE-2026-89737: usb: typec: thunderbolt: Disable work before freeing tbt on remove
In the Linux kernel, the following vulnerability has been resolved:
usb: typec: thunderbolt: Disable work before freeing tbt on remove
tbtaltmoderemove() drops the plug and cable references without draining tbt->work. The work function dereferences those references, and can also requeue itself in its error path. The VDM callbacks can queue the same work item.
Disable and drain tbt->work before dropping the references. This waits for an existing invocation and prevents subsequent schedulework() calls from queueing it during teardown.
This issue was found by an in-house static analysis tool and confirmed by manual code review.
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Configuration
In tbt_altmode_remove(), disable and drain tbt->work before dropping/freeing the plug and cable references, to prevent the work function from dereferencing freed references during teardown.
Linux kernel (usb: typec: thunderbolt) tbt_altmode_remove(): disable work before freeing tbt = Perform drain of tbt->work before dropping plug and cable references
Event History
Frequently Asked Questions
Under what circumstances can this issue be triggered?
The issue is associated with removal of a Thunderbolt Type-C alternate-mode device. During teardown, pending or newly queued tbt->work can run after plug and cable references have been dropped; VDM callbacks and an error path can queue or requeue that work.
What is the mitigation in the resolved kernel code?
The fix disables and drains tbt->work before dropping the plug and cable references. This waits for an active work invocation to finish and prevents schedule_work() from queuing further executions during teardown.
How was this vulnerability identified?
It was found by an in-house static analysis tool and confirmed through manual code review.