CVE-2026-74575: thunderbolt: Prevent XDomain delayed work use-after-free on disconnect
In the Linux kernel, the following vulnerability has been resolved:
thunderbolt: Prevent XDomain delayed work use-after-free on disconnect
tbxdphandlerequest() runs on systemwq and queues xd->statework via queuedelayedwork() in three request handlers: PROPERTIESCHANGEDREQUEST, UUIDREQUEST (via starthandshake), and LINKSTATECHANGEREQUEST. Similarly, updatexdomain() queues xd->propertieschangedwork when local properties change.
Concurrently, tbxdomainremove() calls stophandshake() which does canceldelayedworksync() on both delayed works. Later, tbxdomainunregister() calls deviceunregister() which eventually frees the xdomain. Since commit 559c1e1e0134 ("thunderbolt: Run tbxdphandlerequest() in system workqueue") moved the request handler off tb->wq, the handler and the remove path are no longer serialized. If queuedelayedwork() executes after canceldelayedworksync() but before the xdomain is freed, the delayed work fires on a freed object.
Add xd->removing that tbxdomainremove() sets under xd->lock before calling stophandshake(). Each external queue site holds the same lock and checks removing before calling queuedelayedwork(). This provides the mutual exclusion needed: either the queue site acquires the lock first and queues work that the subsequent cancel will see, or the remove path acquires the lock first and the queue site observes removing == true and skips the queue.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
thunderbolt (kernel)to a version that resolves this vulnerability.Patch 559c1e1e0134 - Configuration
Apply the fix so tb_xdomain_remove() takes xd->lock before removing/frees the xdomain and before calling stop_handshake(); ensure the delayed-work queue path (which uses queue_delayed_work()) acquires the same lock and checks/removes the xd by observing removing==true to skip queuing, preventing delayed work from firing on a freed object.
tb_xdomain_remove()/XDomain removal flow xd->lock mutual exclusion around stop_handshake()/delayed work cancellation and freeing = Use xd->lock to serialize delayed work queuing vs removal (set removing under lock; queue_delayed_work() skips when removing==true).
Event History
Frequently Asked Questions
What is the severity of CVE-2026-74575?
CVE-2026-74575 has a risk score of 51, indicating a moderate severity level.
How do I fix CVE-2026-74575?
To fix CVE-2026-74575, update your Linux kernel to the version that includes the patch addressing this vulnerability.
What type of vulnerability is CVE-2026-74575?
CVE-2026-74575 is classified as a use-after-free vulnerability in the Linux kernel's Thunderbolt subsystem.
What systems are affected by CVE-2026-74575?
CVE-2026-74575 affects systems running vulnerable versions of the Linux kernel that utilize the Thunderbolt feature.
What impact does CVE-2026-74575 have on security?
CVE-2026-74575 could allow an attacker to exploit the delayed work system, potentially leading to arbitrary code execution.