CVE-2026-31731: thermal: core: Address thermal zone removal races with resume
In the Linux kernel, the following vulnerability has been resolved:
thermal: core: Address thermal zone removal races with resume
Since thermal_zone_pm_complete() and thermal_zone_device_resume()
re-initialize the poll_queue delayed work for the given thermal zone,
the cancel_delayed_work_sync() in thermal_zone_device_unregister()
may miss some already running work items and the thermal zone may
be freed prematurely [1].
There are two failing scenarios that both start with
running thermal_pm_notify_complete() right before invoking
thermal_zone_device_unregister() for one of the thermal zones.
In the first scenario, there is a work item already running for
the given thermal zone when thermal_pm_notify_complete() calls
thermal_zone_pm_complete() for that thermal zone and it continues to
run when thermal_zone_device_unregister() starts. Since the poll_queue
delayed work has been re-initialized by thermal_pm_notify_complete(), the
running work item will be missed by the cancel_delayed_work_sync() in
thermal_zone_device_unregister() and if it continues to run past the
freeing of the thermal zone object, a use-after-free will occur.
In the second scenario, thermal_zone_device_resume() queued up by
thermal_pm_notify_complete() runs right after the thermal_zone_exit()
called by thermal_zone_device_unregister() has returned. The poll_queue
delayed work is re-initialized by it before cancel_delayed_work_sync() is
called by thermal_zone_device_unregister(), so it may continue to run
after the freeing of the thermal zone object, which also leads to a
use-after-free.
Address the first failing scenario by ensuring that no thermal work
items will be running when thermal_pm_notify_complete() is called.
For this purpose, first move the cancel_delayed_work() call from
thermal_zone_pm_complete() to thermal_zone_pm_prepare() to prevent
new work from entering the workqueue going forward. Next, switch
over to using a dedicated workqueue for thermal events and update
the code in thermal_pm_notify() to flush that workqueue after
thermal_pm_notify_prepare() has returned which will take care of
all leftover thermal work already on the workqueue (that leftover
work would do nothing useful anyway because all of the thermal zones
have been flagged as suspended).
The second failing scenario is addressed by adding a tz->state check
to thermal_zone_device_resume() to prevent it from re-initializing
the poll_queue delayed work if the thermal zone is going away.
Note that the above changes will also facilitate relocating the suspend
and resume of thermal zones closer to the suspend and resume of devices,
respectively.
Security readout for executives and security teams
Plain-English summary
A race in Linux thermal management can free a thermal-zone object while background work still uses it during resume and device removal. This use-after-free could undermine kernel confidentiality, integrity, or availability. The supplied CVSS score is 7.8 High and describes a local, low-privileged attack requiring no user interaction.
Executive priority
Treat this as expedited kernel maintenance, especially for systems allowing untrusted local users and exercising suspend or resume. It is high severity but not described as an internet-remote flaw, and active exploitation is not evidenced. Use distribution guidance to establish exact package exposure.
Technical view
During power-management completion, delayed thermal work can be reinitialized while thermal_zone_device_unregister() cancels work and frees the zone. Running or newly resumed work may then access freed memory. The fix changes cancellation timing, flushes a dedicated thermal workqueue, and prevents resume reinitialization when the zone is exiting.
Likely exposure
Exposure is limited to affected Linux kernels where power-management completion races thermal-zone unregistration. The bundled affected-version metadata is ambiguous; validate packaged kernels against distribution advisories and the listed stable commits rather than relying on version strings alone.
Exploitation context
The supplied record indicates no KEV listing, and the sources provide no evidence of active exploitation or a public exploit. The CVSS vector describes a local, low-complexity attack requiring low privileges and no user interaction. Triggerability depends on a timing race involving resume and thermal-zone removal.
Researcher notes
Two races are described: existing thermal work survives reinitialization and cancellation, or queued resume work reinitializes poll_queue after teardown begins. Both permit work after object release. No CWE is supplied. The commits strengthen workqueue synchronization and add a state guard, but the bundle does not establish practical exploitability.
Mitigation direction
Update to a vendor-supported kernel containing the applicable fix or backport.
Consult Linux distribution advisories to map affected upstream branches to packaged kernel releases.
Apply the relevant listed stable commit when maintaining a custom kernel.
Reduce untrusted local access if updating must be delayed, pending vendor-specific guidance.
Validation and detection
Inventory running kernel versions and compare them with Linux distribution advisories for this CVE.
Verify package changelogs or kernel sources contain the applicable stable fix.
Confirm each system boots the updated kernel after maintenance.
Review kernel crash logs for thermal-related use-after-free reports around resume events.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cve · low confidence lookup
CVE-2026-31731 mapping review
Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
1CVSS vectors
3Timeline events
0ADP providers
5Source links
CVSS vector scores
1 official score
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.