CVE-2026-98104 in Linux
Zusammenfassung
von VulDB • 25.09.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
net/sched: cls_u32: Behebung eines doppelten Handles bei Erschöpfung des Node-ID-Pools
gen_new_kid() fällt zurück auf die Rückgabe von max (htid | 0xFFF), wenn beide idr_alloc_u32()-Bereiche voll sind, anstatt einen Fehler zu melden. u32_change() vertraut diesem Wert und fügt einen neuen knode mit einem Handle ein, das in der Hash-Tabelle bereits aktiv ist, wodurch die Einzigartigkeit des Handles im Node-ID-Raum der Tabelle verletzt wird.
Das Handle wurde nie in ht->handle_idr reserviert, sodass jeder nachfolgende Fehlerpfad, der idr_remove(&ht->handle_idr, handle) ausführt, die Reservierung eines anderen, aktiven knode entfernt, der dann erneut verwendet wird – ein fehlgeschlagener Add-Vorgang führt zu weiteren Duplikaten.
Die Obergrenze von 4095 gilt pro (Tabelle, Bucket). ht->handle_idr ist pro Hash-Tabelle definiert und die Reichweite leitet sich aus htid (Bucket-ID) ab, sodass eine Tabelle mit Divisor 256 rechtmäßig 256 * 4095 knodes enthalten kann.
Der geschäftliche Helfer gen_new_htid() weist denselben stillen In-Band-Fehler auf: Er gibt 0 zurück, wenn der tp_c-Handle-Pool (1..0x7FF) voll ist, und u32_init() veröffentlicht die Root-Hash-Tabelle mit dem Handle 0 ohne Prüfung. Zwei Root-Tabellen mit dem Handle 0 aliasieren in u32_lookup_ht(), was ein cross-tcf_proto knode add/lookup/delete ermöglicht. Fügen Sie dieselbe Erschöfungsprüfung hinzu, die der Divisor-Pfad bereits hat.
Geben Sie einen Fehler zurück, damit u32_change() bei Erschöpfung des Node-ID-Raums mit ENOSPC/ENOMEM fehlschlägt und u32_init() bei Erschöpfung des Hash-Table-ID-Raums mit -ENOMEM fehlschlägt. Die extack-Nachricht unterscheidet Pool-Erschöpfung (-ENOSPC) von einem vorübergehenden Allokationsfehler (-ENOMEM).
Bedingungen zur Reproduktion des Fehlers: - CONFIG_NET_SCHED=y, CONFIG_CLS_U32=y (oder =m mit geladenem Modul) - Erstellen Sie ein clsact-qdisc auf einem Gerät und fügen Sie dann 4095 u32-Filter mit automatisch generierten Handles hinzu, um den Node-ID-Raum für die Root-Hash-Tabelle (einzelner Bucket) zu füllen. Der Add-Vorgang des 4096. auto-handle-Filters löst das doppelte Handle aus (fh 800::fff wird erneut verwendet). Erreichbar auf Level 2 (unshare -Urn, namespace-lokales CAP_NET_ADMIN). - Für gen_new_htid: Erstellen Sie 2047 u32-proto-Einträge im selben Block, um den tp_c-Handle-Pool zu füllen, und erstellen Sie dann einen weiteren. Die Root-Tabelle erhält das Handle 0 und aliasiert mit anderen Root-Tabellen mit dem Handle 0.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.