sched/psi: Shut down rtpoll_timer in psi_cgroup_free() (Linux Linux)

CVE-2026-74594
HIGH 7.8

At a glance

Source
NVD
EPSS
EPSS 0.13 % · percentile 3 ()
State
PUBLISHED
Published
Updated
Assigner
Linux
NVD status
Received

Description

In the Linux kernel, the following vulnerability has been resolved: sched/psi: Shut down rtpoll_timer in psi_cgroup_free() psi_schedule_rtpoll_work() is called locklessly from the scheduler hotpath and can race psi_trigger_destroy() taking down the last rtpoll trigger under rtpoll_trigger_lock: psi_schedule_rtpoll_work() psi_trigger_destroy() rcu_read_lock(); task = rcu_dereference(rtpoll_task); rcu_assign_pointer(rtpoll_task, NULL); timer_delete(&rtpoll_timer); mod_timer(&rtpoll_timer, ...); rcu_read_unlock(); synchronize_rcu(); kthread_stop(task_to_destroy); The group can then be freed with the re-armed timer still pending, and poll_timer_fn() runs on freed memory. 461daba06bdc ("psi: eliminate kthread_worker from psi trigger scheduling mechanism") deleted the timer synchronously after the synchronize_rcu(), which prevented this but raced trigger creation instead: the deletion could cancel the timer that a new trigger set armed during the grace period and, as creation also reinitialized the timer at the time, corrupt it. 8f91efd870ea ("psi: Fix race between psi_trigger_create/destroy") moved the initialization into group_init() and the deletion into the locked section, trading the creation races for the window above. Neither placement in the destruction path works. A pending timer firing while the group is alive is harmless though. poll_timer_fn() just wakes the rtpoll waitqueue and doesn't re-arm itself. Bind the timer to the group's lifetime instead and shut it down in psi_cgroup_free(). Nothing can arm it by then. timer_shutdown_sync() because the timer is never armed again.

References

Scores

VersionScoreVectorScored by
CVSS 3.1HIGH 7.8CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HLinux
CVSS 3.1HIGH 7.8CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HNVD · 416baaa9-dc9f-4396-8d5f-8c081fb06d67 (Secondary)

European references

CERT-FR advisories

Affected products

ProductVersions
Linux · Linuxaffected 6bfcb6178925b1fd28c102e53d403091b8f49396 < 4addb102154b7cf6e2310ccbe20c3c08619e520d ; affected 8f91efd870ea5d8bc10b0fcc9740db51cd4c0c83 < 894a9300d7fb2e2951da92e565ae6de7ddfb0a69 ; affected 8f91efd870ea5d8bc10b0fcc9740db51cd4c0c83 < 1e5ca82eee59caca6988f9d6e859786aab8a5fa0 ; affected 8f91efd870ea5d8bc10b0fcc9740db51cd4c0c83 < 310b5a537a78c358a4cd244bd767c1a517a05459 ; affected 8f91efd870ea5d8bc10b0fcc9740db51cd4c0c83 < 806fcff98c1d7cb3c1dc0015e55ebdbe819e6b08 ; affected 8f91efd870ea5d8bc10b0fcc9740db51cd4c0c83 < 8037c5b2b2a447df52542f4d8535895d837bdcbd
Linux · Linuxaffected 5.14 ; unaffected 0 < 5.14 ; unaffected 5.10.266 ≤ 5.10.* ; unaffected 5.15.217 ≤ 5.15.* ; unaffected 6.1.183 ≤ 6.1.* ; unaffected 6.6.152 ≤ 6.6.*

Sources

SourceLicence
CVE List (CVEProject cvelistV5)CVE Program Terms of Use
EPSS (FIRST.org)FIRST — attribution requested
ENISA EUVDENISA — reproduction authorised, source acknowledged
CERT-FR (ANSSI)Licence Ouverte / Etalab 2.0
NVD (NIST) via fkie-cad/nvd-json-data-feedsPublic domain — this product uses data from the NVD API but is not endorsed or certified by the NVD