CVE-2024-43892 in Linuxinfo

Zusammenfassung

von VulDB • 05.06.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

memcg: Schutz des gleichzeitigen Zugriffs auf mem_cgroup_idr

Der Commit 73f576c04b94 („mm: memcontrol: cgroup-Erstellungsfehler nach vielen kleinen Jobs beheben“) entkoppelte die memcg-IDs vom CSS-ID-Raum, um Fehler bei der Erstellung von Cgroups zu beheben. Dabei wurde IDR eingeführt, um den memcg-ID-Raum aufrechtzuerhalten. Die IDR ist für Änderungen auf externe Synchronisationsmechanismen angewiesen. Für `mem_cgroup_idr` erfolgen die Aufrufe von `idr_alloc()` und `idr_replace()` innerhalb des CSS-Callbacks und sind somit durch das `cgroup_mutex` vor gleichzeitigen Änderungen geschützt. Der Aufruf von `idr_remove()` für `mem_cgroup_idr` war jedoch nicht gegen Gleichläufigkeit (Concurrency) geschützt und konnte parallel für verschiedene memcgs ausgeführt werden, wenn diese ihren refcnt auf Null erreichten. Dies wurde behoben.

Wir haben seit langer Zeit in unserem Rechenzentrum mit geringer Häufigkeit kernelbasierte Abstürze beobachtet, die durch list_lru verursacht wurden. Diese Abstürze traten an verschiedenen Stellen des list_lru-Codes auf, darunter `list_lru_add()`, `list_lru_del()` und im Code zur Neuzuordnung (Reparenting). Bei weiterer Untersuchung zeigte sich, dass für ein bestimmtes Objekt (dentry und inode) die `list_lru` des super_block keine `list_lru_one` für den memcg dieses Objekts enthielt. Die anfänglichen Verdachtsmomente galten entweder der Annahme, dass das Objekt nicht über `kmem_cache_alloc_lru()` allokiert wurde, oder dem Fall, dass `memcg_list_lru_alloc()` fehlschlug, keine `list_lru_one()` für einen memcg zu allokieren, aber dennoch Erfolg meldete. Für diese Fälle wurden jedoch keine Beweise gefunden.

Bei einer tiefergehenden Untersuchung stellten wir Situationen fest, in denen die ID eines gültigen memcgs nicht mehr in `mem_cgroup_idr` vorhanden war und in einigen Fällen mehrere gültige memcgs dieselbe ID besaßen, wobei `mem_cgroup_idr` auf einen von ihnen zeigte. Die plausibelste Erklärung ist daher, dass diese Situationen aufgrund einer Race Condition zwischen mehreren Aufrufen von `idr_remove()` oder einer Race Condition zwischen `idr_alloc()/idr_replace()` und `idr_remove()` auftreten können. Diese Wettläufe führen dazu, dass mehrere memcgs dieselbe ID erhalten; das Offline-Schalten (Offlining) eines davon würde dann die list_lrus im System für alle betroffenen Objekte bereinigen. Spätere Zugriffe anderer memcgs auf die list_lru verursachen daraufhin Abstürze aufgrund fehlender `list_lru_one`.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Zuständig

Linux

Reservieren

17.08.2024

Veröffentlichung

26.08.2024

Moderieren

akzeptiert

Eintrag

VDB-275783

CPE

bereit

EPSS

0.00229

KEV

nein

Aktivitäten

very low

Quellen

Do you know our Splunk app?

Download it now for free!