CVE-2026-97941
mm/slab: n->list_lock in __slab_try_return_freelist() sperren, um Race zu vermeiden
- Veröffentlicht
- 25.09.2026
- Aktualisiert
- 19.10.2026
- CNA zuweisen
- Linux
- Beweise beobachtet
- 04.11.2026
Primäres CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HNiedrig · nächste 30 Tage
- Perzentil
- 6,8 %
- Modelldatum
- 04.11.2026
EPSS ist eine statistische Schätzung, keine Gewissheit oder ein Maß für die Auswirkung. Kombinieren Sie es mit CVSS, KEV-Status, Belichtung und Ihrer Umgebung.
Zusammenfassung
Im Linux-Kernel wurde die folgende Schwachstelle behoben: mm/slab: n->list_lock in __slab_try_return_freelist() nehmen, um eine Race Condition zu vermeiden. Commit ba7425312607 („mm, slab: add an optimistic __slab_try_return_freelist()“) ging fälschlicherweise davon aus, dass niemand ein Objekt an den Slab freigegeben hat, solange slab->freelist NULL ist und cmpxchg erfolgreich ist. Wie jedoch von Hyunwoo Kim [1] gemeldet wurde, könnten andere CPUs ein Objekt an den Slab freigegeben, den Slab in die Partial-Liste eingefügt, dann ein Objekt aus dem Slab alloziert haben und sich gerade mitten im Entfernen des Slabs aus der Liste unter n->list_lock befinden. Da __refill_objects_node() den Slab außerhalb von n->list_lock wieder auf pc.slabs setzt, könnte es den Slab in diese Liste einfügen, während der Slab gleichzeitig aus n->partial entfernt wird. Dies führte zu einer Listenkorruption [1]: list_add corruption. next->prev should be prev (ffff888100000248), but was dead000000000122. (next=ffffea000416e410). kernel BUG at lib/list_debug.c:29! Oops: invalid opcode: 0000 [#1] SMP NOPTI CPU: 1 UID: 65534 PID: 144 Comm: poc Not tainted 7.2.0-16172-gcf72cbb39da8-dirty #1 PREEMPT(lazy) RIP: 0010:__list_add_valid_or_report+0x80/0xd0 ... Call Trace: alloc_from_new_slab+0x183/0x300 ___slab_alloc+0x31c/0x890 __kmalloc_noprof+0x3d4/0x800 lsm_blob_alloc+0x2d/0x50 security_msg_msg_alloc+0x26/0x90 load_msg+0x1aa/0x210 do_msgsnd+0x91/0x800 do_syscall_64+0x109/0x5d0 entry_SYSCALL_64_after_hwframe+0x77/0x7f ... Kernel panic - not syncing: Fatal exception Dies ist ein klassisches ABA-Problem, bei dem cmpxchg erfolgreich ist, sich der Zustand jedoch geändert hat, seit __refill_objects_node() die Freelist vom Slab übernommen hat. Wie Vlastimil Babka erwähnte [2], sollte es selten vorkommen, dass mehr als ein Slab zurückgegeben wird (aufgrund des race-anfälligen Lesens von slab->counters in get_partial_node_bulk()). Daher wird, anstatt zusätzliche Komplexität einzuführen, n->list_lock im schlimmsten Fall zweimal erworben und freigegeben. Der Slab wird direkt an die Partial-Liste zurückgegeben und n->list_lock wird über den cmpxchg und add_partial() hinweg gehalten. Dies ähnelt der ursprünglichen Version von Commit ba7425312607 [3]. Dies reicht aus, um die Race Condition zu vermeiden, da die Listenmanipulation durch n->list_lock serialisiert wird. Dabei wird auch der unlikely()-Hinweis wieder eingeführt, da die Bedingung nun unwahrscheinlich ist.
Quellen
Verantwortungsvoller Umgang
Verwenden Sie Schwachstelleninformationen nur auf Systemen, die Sie besitzen oder zu deren Testen Sie berechtigt sind. Kitploit verlinkt auf öffentliche Forschungsmetadaten und speichert keinen Exploit-Code oder bösartige Payloads.