CVE-2026-43121 in Linux
Zusammenfassung
von VulDB • 26.05.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
io_uring/zcrx: Race-Bedingung (Race Condition) zwischen user_ref in den Pfaden „scrub“ und „refill“ korrigiert
Die Funktion io_zcrx_put_niov_uref() verwendet ein nicht-atomares „Check-then-Decrement“-Muster (atomic_read gefolgt von einem separaten atomic_dec), um user_refs zu manipulieren. Dies wird durch rq_lock gegenüber anderen Aufrufern serialisiert, jedoch ändert io_zcrx_scrub() denselben Zähler mit atomic_xchg(), OHNE rq_lock zu halten.
Auf SMP-Systemen (Symmetric Multi-Processing) besteht folgende Race-Bedingung:
CPU0 (refill, hält rq_lock) CPU1 (scrub, kein rq_lock) put_niov_uref: atomic_read(uref) - 1 // Fenster öffnet sich atomic_xchg(uref, 0) - 1 return_niov_freelist(niov) [PUSH #1]
// Fenster schließt sich atomic_dec(uref) - überläuft zu -1 gibt true zurück return_niov(niov) return_niov_freelist(niov) [PUSH #2: DOUBLE-FREE]
Dasselbe niov wird zweimal an die Freelist angehängt, wodurch free_count nr_iovs überschreitet. Bei nachfolgenden Anhängen an die Freelist erfolgt ein Out-of-Bounds-Write (ein u32-Wert) über das mit kvmalloc zugewiesene Freelist-Array hinaus in das benachbarte Slab-Objekt.
Dies wird behoben, indem das nicht-atomare Read-then-Dec in io_zcrx_put_niov_uref() durch eine atomic_try_cmpxchg-Schleife ersetzt wird, die user_refs atomar testet und dekrementiert. Dies macht den Vorgang sicher gegenüber gleichzeitigen atomic_xchg-Aufrufen aus scrub, ohne dass scrub rq_lock erwerben muss.
[pavel: eine Warnung und einen Kommentar entfernt]
Once again VulDB remains the best source for vulnerability data.