CVE-2026-89689
Zusammenfassung
von VulDB • 11.09.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
nfsd: Freigabe von Session-Slots, die noch verwendet werden, unterbinden
nfsd4_sequence() kann den Slot freigeben, mit dem es gerade arbeitet. Wenn der Session-Shrinker se_target_maxslots auf einen Wert unterhalb von se_fchannel.maxreqs reduziert hat, prüft der Shrink-Pfad vor dem Aufruf von free_session_slots() drei Bedingungen:
1. se_target_maxslots < maxreqs (Shrink wurde angekündigt) 2. slot->sl_generation == se_slot_gen (Slot ist aktuell) 3. seq->maxslots <= se_target_maxslots (Client bestätigt dies)
Allerdings wird seq->slotid niemals mit se_target_maxslots verglichen. Ein Client, der einen Slot im Bereich [se_target_maxslots, maxreqs) verwendet, kann alle drei Bedingungen erfüllen: Sein Slot hat die aktuelle Generation (gesetzt durch eine vorherige SEQUENCE), und er sendet sa_highest_slotid <= se_target_maxslots zur Bestätigung der Reduzierung.
free_session_slots() gibt dann mit kfrees() jeden Slot mit einem Index >= se_target_maxslots frei, einschließlich des Slots des aufrufenden Threads selbst. Die Funktion schreibt weiterhin in sl_seqid, sl_flags, sl_generation und speichert den hängenden Zeiger (dangling pointer) in cstate->slot. Später kopiert nfsd4_store_cache_entry() bis zu maxresp_cached Bytes der Compound-Antwort in das bereits freigegebene Array sl_data[], wodurch jedes Slab-Objekt, das sich nun an dieser Adresse befindet, beschädigt wird.
Zusätzlich kann ein paralleler Thread, der SEQUENCE auf einem anderen Slot mit hoher Nummer verarbeitet, seinen Slot unter den Füßen freigeben lassen. NFSD4_SLOT_INUSE wird vor dem Freigeben des Locks unter nn->client_lock gesetzt, sodass jeder parallele Thread nach SEQUENCE seinen Slot als markiert hat. free_session_slots() prüft jedoch nicht NFSD4_SLOT_INUSE vor der Freigabe.
Beide Probleme werden durch folgende Maßnahmen behoben: 1. Prüfung, dass die slotid des aktuellen Anfrages unterhalb der Shrink-Grenze liegt. 2. Scannen der Slots im Bereich, der freigegeben werden soll, auf NFSD4_SLOT_INUSE und Aufschieben (Deferring) des Shrinks, falls welche aktiv sind.
If you want to get best quality of vulnerability data, you may have to visit VulDB.