Skip to main content

Linux Kernel CVE-2026-52991

| EUVDEUVD-2026-38859 HIGH
Time-of-check Time-of-use (TOCTOU) Race Condition (CWE-367)
2026-06-24 Linux GHSA-3v2r-c9x3-5fgr
7.8
CVSS 3.1 · Vendor: Linux
Share

Severity by source

Vendor (Linux) PRIMARY
7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI
7.0 HIGH

Local cgroup pressure-file write access gives AV:L/PR:L; the timing-sensitive cross-CPU race justifies AC:H; UAF in kernel context yields full C/I/A impact.

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:L/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
SUSE
5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Red Hat
7.0 HIGH
qualitative

Primary rating from Vendor (Linux).

CVSS VectorVendor: Linux

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

5
Analysis Generated
Jun 28, 2026 - 08:44 vuln.today
CVSS changed
Jun 28, 2026 - 08:22 NVD
7.8 (HIGH)
Patch available
Jun 24, 2026 - 18:02 EUVD
CVE Published
Jun 24, 2026 - 16:29 cve.org
HIGH 7.8
CVE Published
Jun 24, 2026 - 16:29 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

In the Linux kernel, the following vulnerability has been resolved:

sched/psi: fix race between file release and pressure write

A potential race condition exists between pressure write and cgroup file release regarding the priv member of struct kernfs_open_file, which triggers the uaf reported in [1].

Consider the following scenario involving execution on two separate CPUs:

CPU0 CPU1 == == vfs_rmdir() kernfs_iop_rmdir() cgroup_rmdir() cgroup_kn_lock_live() cgroup_destroy_locked() cgroup_addrm_files() cgroup_rm_file() kernfs_remove_by_name() kernfs_remove_by_name_ns() vfs_write() __kernfs_remove() new_sync_write() kernfs_drain() kernfs_fop_write_iter() kernfs_drain_open_files() cgroup_file_write() kernfs_release_file() pressure_write() cgroup_file_release() ctx = of->priv; kfree(ctx); of->priv = NULL; cgroup_kn_unlock() cgroup_kn_lock_live() cgroup_get(cgrp) cgroup_kn_unlock() if (ctx->psi.trigger) // here, trigger uaf for ctx, that is of->priv

The cgroup_rmdir() is protected by the cgroup_mutex, it also safeguards the memory deallocation of of->priv performed within cgroup_file_release(). However, the operations involving of->priv executed within pressure_write() are not entirely covered by the protection of cgroup_mutex. Consequently, if the code in pressure_write(), specifically the section handling the ctx variable executes after cgroup_file_release() has completed, a uaf vulnerability involving of->priv is triggered.

Therefore, the issue can be resolved by extending the scope of the cgroup_mutex lock within pressure_write() to encompass all code paths involving of->priv, thereby properly synchronizing the race condition occurring between cgroup_file_release() and pressure_write().

And, if an live kn lock can be successfully acquired while executing the pressure write operation, it indicates that the cgroup deletion process has not yet reached its final stage; consequently, the priv pointer within open_file cannot be NULL. Therefore, the operation to retrieve the ctx value must be moved to a point *after* the live kn lock has been successfully acquired.

In another situation, specifically after entering cgroup_kn_lock_live() but before acquiring cgroup_mutex, there exists a different class of race condition:

CPU0: write memory.pressure CPU1: write cgroup.pressure=0 ===== =======

kernfs_fop_write_iter() kernfs_get_active_of(of) pressure_write() cgroup_kn_lock_live(memory.pressure) cgroup_tryget(cgrp) kernfs_break_active_protection(kn) ... blocks on cgroup_mutex

cgroup_pressure_write() cgroup_kn_lock_live(cgroup.pressure) cgroup_file_show(memory.pressure, false) kernfs_show(false) kernfs_drain_open_files() cgroup_file_release(of) kfree(ctx) of->priv = NULL cgroup_kn_unlock()

... acquires cgroup_mutex ctx = of->priv; // may now be NULL if (ctx->psi.trigger) // NULL dereference

Consequently, there is a possibility that of->priv is NULL, the pressure write needs to check for this.

Now that the scope of the cgroup_mutex has been expanded, the original explicit cgroup_get/put operations are no longer necessary, this is because acquiring/releasing the live kn lock inherently executes a cgroup get/put operation.

[1] BUG: KASAN: slab-use-after-free in pressure_write+0xa4/0x210 kernel/cgroup/cgroup.c:4011 Call Trace: pressure_write+0xa4/0x210 kernel/cgroup/cgroup.c:4011 cgroup_file_write+0x36f/0x790 kernel/cgroup/cgroup.c:43 ---truncated---

AnalysisAI

Local privilege-escalation-capable memory corruption in the Linux kernel's PSI (Pressure Stall Information) subsystem allows a local user with write access to cgroup pressure files to trigger a use-after-free or NULL-pointer dereference. The flaw stems from a race between pressure_write() and cgroup file release/rmdir on the kernfs_open_file->priv pointer, confirmed via a KASAN slab-use-after-free report in pressure_write+0xa4/0x210. No public exploit identified at time of analysis, and EPSS is low (0.19%, 8th percentile), indicating no observed mass exploitation.

Technical ContextAI

The vulnerability lives in kernel/cgroup/cgroup.c within the scheduler's PSI (sched/psi) feature, which exposes per-cgroup resource-pressure metrics through cgroupv2 files such as memory.pressure, io.pressure, and cpu.pressure. User space can write to these files to register pressure-stall triggers; the trigger context (ctx) is stored in struct kernfs_open_file->priv. The root cause is a classic concurrency/lifetime bug (effectively CWE-416 Use-After-Free and CWE-476 NULL Pointer Dereference; CWE was listed as N/A in the source data). cgroup_mutex protects deallocation of of->priv in cgroup_file_release(), but pressure_write() read and dereferenced ctx = of->priv outside that protected window. Two race classes exist: (1) a concurrent vfs_rmdir()/cgroup_destroy path frees ctx via kernfs_drain_open_files() before pressure_write() dereferences it (UAF), and (2) a concurrent write of cgroup.pressure=0 invokes kernfs_show()->kernfs_drain_open_files() which sets of->priv=NULL, producing a NULL dereference. The fix extends cgroup_mutex coverage to all of->priv access, moves the ctx fetch to after the live kn lock is acquired, and adds a NULL check. The CPE data is generic (cpe:2.3:a:linux:linux:*) and does not pin exact version ranges. Note the source tag labels this 'Information Disclosure,' which conflicts with the UAF/memory-corruption nature and the C:H/I:H/A:H impact rating.

RemediationAI

Vendor-released patch: upgrade to a fixed stable kernel - 6.18.33, 7.0.10, or 7.1 (or your distribution's backported equivalent) - which extends the cgroup_mutex scope across all of->priv accesses and adds the NULL check. Apply the corresponding distribution kernel update (RHEL/Debian/Ubuntu/SUSE backports) and reboot, since kernel fixes require a reboot or livepatch to take effect; the upstream commits are at https://git.kernel.org/stable/c/03dc070fa0fc3cb4068693f468ccd5f8a7e58282, https://git.kernel.org/stable/c/d4352c0709bfd38c752fccbde7fd72a82ac78f23, and https://git.kernel.org/stable/c/a5b98009f16d8a5fb4a8ff9a193f5735515c38fa. Where immediate patching is not possible, the most direct compensating control is to restrict write access to cgroupv2 pressure files: avoid delegating cgroup subtrees to untrusted users and ensure memory.pressure/io.pressure/cpu.pressure and cgroup.pressure are not writable by unprivileged or untrusted local accounts and containers - the trade-off is that legitimate workloads relying on PSI trigger registration (e.g. userspace OOM managers like systemd-oomd or low-memory daemons) will lose that capability. As a deeper but more disruptive option, disabling PSI (CONFIG_PSI=n or the psi=0 boot parameter) removes the vulnerable code path entirely but also disables all pressure-stall accounting and any tooling that depends on it.

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 16.0 Affected

Share

CVE-2026-52991 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy