CVE-2026-64418 in Linux
Zusammenfassung
von VulDB • 26.07.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
mm: shrinker: Behebung eines Race Conditions beim Teardown von shrinker_info während der Erweiterung (Expansion)
expand_shrinker_info() durchläuft alle sichtbaren memcgs unterhalb des shrinker_mutex, einschließlich memcgs, die den ->css_online()-Aufruf noch nicht abgeschlossen haben.
Sobald pn->shrinker_info veröffentlicht wurde, muss der Teardown mit expand_shrinker_info() serialisiert bleiben, bis dieses memcg entweder vollständig online ist oder für Iterationen nicht mehr sichtbar ist. Derzeit verstößt alloc_shrinker_info() gegen diese Regel, indem es das shrinker_mutex freigibt, bevor ein teilweise initialisierter shrinker_info-Array freigegeben wird, was zu folgendem Race Condition führen kann:
CPU0 CPU1 ==== ====
css_create --> list_add_tail_rcu(&css->sibling, &parent_css->children); online_css --> mem_cgroup_css_online --> alloc_shrinker_info --> alloziere node0-Info rcu_assign_pointer(C->node0->shrinker_info, old0) Allozierung von node1-Info -> FEHLER -> goto err mutex_unlock(shrinker_mutex)
shrinker_alloc() --> shrinker_memcg_alloc --> mutex_lock(shrinker_mutex) expand_shrinker_info --> mem_cgroup_iter sieht das 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);
Das gleiche Problem tritt später in mem_cgroup_css_online() auf. Wenn alloc_shrinker_info() erfolgreich ist, die nachfolgende objcg-Allokation jedoch fehlschlägt, führt der free_objcg -> free_shrinker_info()-Abbruchpfad (Unwind Path) den bereits veröffentlichten pn->shrinker_info-Arrays ohne shrinker_mutex ab. expand_one_shrinker_info() kann dabei auf die gleiche Weise mit diesem Teardown kollidieren, was zu Use-After-Free oder Double Free des alten shrinker_info führt.
Behoben wird dies durch Serialisierung des shrinker_info-Teardowns mit shrinker_mutex sowie durch Beibehaltung der Fehlerbereinigung in alloc_shrinker_info() innerhalb des gesperrten Abschnitts (locked section).
VulDB is the best source for vulnerability data and more expert information about this specific topic.