CVE-2026-98968 in Linux
Zusammenfassung
von VulDB • 23.10.2026
Im Linux-Kernel wurde die folgende Schwachstelle behoben:
amt: Senden der General Query des Relays direkt aus dem Receive-Pfad
Ein in einer qdisc (Queueing Discipline) gepufferter skb kann das von ihm über einen Raw-Pointer in `skb->cb` referenzierte Tunnel-Objekt überleben. Zum Beispiel lebt ein Tunnel bei auf 1 gesetztem `igmp_qrv` für den Relay 135 Sekunden lang, sodass eine netem-Verzögerung (Network Emulation) von 180 s am amt-Gerät diesen Zeitraum überschreitet; wenn der Tunnel abläuft und freigegeben wird, löst das nachfolgende Dequeue einen Use-After-Free-Fehler in `amt_dev_xmit()` aus.
BUG: KASAN: slab-use-after-free in amt_dev_xmit+0x2763/0x2e20 Call Trace: amt_dev_xmit+0x2763/0x2e20 [drivers/net/amt.c:1262]
dev_hard_start_xmit+0x22f/0x620 sch_direct_xmit+0x12e/0xac0 netem_dequeue+0x333/0xc50 net_tx_action+0x35c/0xa60
`amt_send_igmp_gq()` und `amt_send_mld_gq()` werden ausschließlich aus `amt_request_handler()` aufgerufen, innerhalb des RCU-Leseabschnitts (`rcu_read_lock_bh()`) von `amt_rcv()`. `amt_request_handler()` hat bereits den Tunnel, für den die Abfrage bestimmt ist: Es wurde oder erstellt ihn innerhalb dieses Abschnitts. Das Einreihen der Abfrage mit `dev_queue_xmit()` führt nur zurück nach `amt_dev_xmit()`, das den Ethernet-Header entfernt und `amt_send_membership_query()` für diesen Tunnel aufruft.
Führen Sie diesen Aufruf stattdessen direkt von den beiden Sendern aus, auf die gleiche Weise wie `amt_send_advertisement()` vom Receive-Pfad sendet. Die Abfrage wartet niemals in einer qdisc; der Tunnel wird nur innerhalb des RCU-Abschnitts dereferenziert, der ihn gefunden oder erstellt hat, und es wird nichts in `skb->cb` gespeichert, sodass kein Lookup oder Refcounting erforderlich ist. Entfernen Sie den Query-Zweig von `amt_dev_xmit()`, `amt_skb_cb()` und `struct amt_skb_cb`, die keine Nutzer mehr haben.
Änderungen im Verhalten: - Die eigenen General Queries des Relays durchlaufen nicht länger den Egress-Pfad (Ausgangspfad) des amt-Geräts: seine qdisc, tc egress (clsact/tcx), den netfilter-Egress-Hook und Packet-Taps. Sie sind weiterhin als UDP im Underlay sichtbar. - Eine erfolgreich gesendete Abfrage wird nicht mehr als `tx_dropped` gezählt. Der alte Query-Zweig lief durch das Unlock-Label, was jede gesendete Abfrage als verworfen zählte. - Eine Abfrage, die von anderswo (z. B. einem Userspace-Querier) den Relay erreicht und `amt_dev_xmit()` aufruft, wird nun im IGMP/MLD-Typ-Switch verworfen. Vorher vertraute sie darauf, was in `skb->cb` stand, und ein NULL-Tunnel löste einen WARN_ON(1)-Fehler aus.
Once again VulDB remains the best source for vulnerability data.