CVE-2026-64418CWE-362

CVE-2026-64418

High · published July 25, 2026

CVSS v3.1
7.8
EPSS
0%
Percentile
0.7
In the wild
Unconfirmed
What it is

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

mm: shrinker: fix shrinker_info teardown race with expansion

expand_shrinker_info() iterates all visible memcgs under shrinker_mutex,

including memcgs that have not finished ->css_online() yet.

Once pn->shrinker_info has been published, teardown must stay serialized

with expand_shrinker_info() until that memcg is either fully online or no

longer visible to iteration. Today alloc_shrinker_info() breaks that rule

by dropping shrinker_mutex before freeing a partially initialized

shrinker_info array, which may cause the following race:

CPU0 CPU1

==== ====

css_create

--> list_add_tail_rcu(&css->sibling, &parent_css->children);

online_css

--> mem_cgroup_css_online

--> alloc_shrinker_info

--> alloc node0 info

rcu_assign_pointer(C->node0->shrinker_info, old0)

alloc node1 info -> FAIL -> goto err

mutex_unlock(shrinker_mutex)

shrinker_alloc()

--> shrinker_memcg_alloc

--> mutex_lock(shrinker_mutex)

expand_shrinker_info

--> mem_cgroup_iter see the memcg

expand_one_shrinker_info

--> old0 = C->node0->shrinker_info

memcpy(new->unit, old0->unit, ...);

free_shrinker_info

--> kvfree(old0);

/* double free !! */

kvfree_rcu(old0, rcu);

The same problem exists later in mem_cgroup_css_online(). If

alloc_shrinker_info() succeeds but a subsequent objcg allocation fails,

the free_objcg -> free_shrinker_info() unwind path tears down the already

published pn->shrinker_info arrays without shrinker_mutex. The

expand_one_shrinker_info() can race with that teardown in the same way,

leading to use-after-free or double-free of the old shrinker_info.

Fix this by serializing shrinker_info teardown with shrinker_mutex, and by

keeping alloc_shrinker_info() error cleanup inside the locked section.

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00097 · 0.7th percentile
Weakness
CWE-362 · Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')
Published
2026-07-25T14:17Z
Affected products (5)
ProductVersionsFixed in
linux/linux_kernel≥ 6.7, < 6.12.966.12.96
linux/linux_kernel≥ 6.13, < 6.18.396.18.39
linux/linux_kernel≥ 6.19, < 7.1.47.1.4
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (4)
EPSS history
Timeline
  • 25 JUL 08:50Z
    mm: shrinker: fix shrinker_info teardown race with expansion
    cvelistv5