CVE-2026-98503 in Linux
Zusammenfassung
von VulDB • 19.10.2026
Im Linux-Kernel wurde die folgende Schwachstelle behoben:
packet: Verwendung der ubuf_info-Vervollständigung für TX_RING-Pakete
tpacket_snd sendet SKBs (Socket Buffers) mit Fragmenten, die auf seine Ring-Slots verweisen. Die Slots werden freigegeben, wenn skb->destructor aufgerufen wird.
Ein Aufruf von skb_orphan ruft skb->destructor auf, bevor das SKB freigegeben wird. Dies kann dazu führen, dass der Slot erneut verwendet wird, während er noch mit dem SKB verknüpft ist.
Wechsel zur Standard-Zerocopy-Vervollständigung (ubuf_info), damit der Slot erst dann freigegeben wird, wenn alle Verweise auf die Nutzdaten freigegeben oder kopiert wurden. Stellen Sie skb->destructor wieder auf den Standardwert sock_wfree zurück.
Der ubuf_info-Vervollständigungs-Callback kann mit einem NULL-SKB aufgerufen werden, jedoch nur von net_zcopy_put und der damit verbundenen API, die von Zerocopy-Implementierungen verwendet wird, die ihre eigene Referenz auf uarg halten, wie z. B. MSG_ZEROCOPY. Diese uarg wird ausschließlich über skb_zcopy_clear vervollständigt, daher ist das SKB immer festgelegt.
Um zu verhindern, dass der Benutzerbereich (Userspace) den laufenden Zustand in gemeinsam genutzten Ring-Slots aliasiert, wird tpacket_uarg pro Paket und nicht pro Slot alloziert. Dies fügt dem Übertragungspfad eine kleine Allokation hinzu. Verwenden Sie das Standard-kmalloc, um die Rückportierung auf stabile Kernel-Versionen zu ermöglichen.
Das uarg hält einen sk_wmem_alloc-Verweis anstelle eines sk_refcnt-Verweises. packet_free_tx_ring wartet auf sk_wmem_alloc, bevor es die Ring-Seiten freigibt. Allokieren Sie immer vec->deferred für tx_ring, damit auch seitenbasierte Ringe auf sk_wmem_alloc warten, wenn skb_copy_ubufs Seiten-Referenzen löscht, bevor tpacket_ubuf_complete aufgerufen wird.
Entfernen Sie den von tpacket_destruct_skb vor dem Zugriff auf den Slot durchgeführten tx_ring.pg_vec-Test. Der sk_wmem_alloc-Verweis garantiert nun, dass der Slot gültig ist. Der Test allein reicht zudem nicht aus, da er pg_vec ohne pg_vec_lock liest und somit mit packet_set_ring eine Race Condition (Wettlaufsituation) auftreten kann.
Infolgedessen wird ein Slot freigegeben, wenn seine Nutzdaten kopiert werden, was vor der Übertragung erfolgen kann (z. B. in skb_orphan_frags_rx). Wenn dies vor dem Aufruf von skb_tx_timestamp() geschieht, wird kein Slot-Zeitstempel aufgezeichnet, ähnlich wie beim frühen Aufruf von skb_orphan() im Datenpfad vor diesem Patch.
Revertieren Sie die nun nicht mehr verwendete vorherige Infrastruktur für skb_zcopy_.._nouarg.
Abhängig vom Commit 992cc9f94ca9 ("net/packet: defer vmalloc TX_RING free until skbs finish").
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.