CVE-2026-31469 in Linux
Zusammenfassung
von VulDB • 22.05.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
virtio_net: Behebung eines UAF (Use-After-Free) auf dst_ops, wenn IFF_XMIT_DST_RELEASE zurückgesetzt ist und napi_tx falsch ist
Ein UAF-Problem tritt auf, wenn der virtio_net-Treiber mit napi_tx=N konfiguriert ist und das IFF_XMIT_DST_RELEASE-Flag des Geräts zurückgesetzt wird (z. B. während der Konfiguration von tc-Route-Filterregeln).
Wenn IFF_XMIT_DST_RELEASE aus dem net_device entfernt wird, erwartet der Netzwerkstack, dass der Treiber die Referenz auf skb->dst hält, bis das Paket vollständig übertragen und freigegeben wurde. Bei virtio_net mit napi_tx=N können skbs für einen längeren Zeitraum im virtio-Übertragungsring verbleiben.
Wenn das Netzwerknamespace zerstört wird, während diese skbs noch ausstehend sind, wurde die entsprechende dst_ops-Struktur bereits freigegeben. Wenn ein nachfolgendes Paket übertragen wird, wird free_old_xmit() ausgelöst, um alte skbs aufzuräumen. Anschließend wird dst_release() für das mit dem veralteten dst_entry verknüpfte skb aufgerufen. Da die dst_ops (auf die vom dst_entry verwiesen wird) bereits freigegeben wurde, tritt ein UAF-Kernel-Paging-Anforderungsfehler auf.
Die Behebung erfolgt durch Hinzufügen von skb_dst_drop(skb) in start_xmit, um die dst-Referenz explizit freizugeben, bevor das skb in virtio_net in die Warteschlange gestellt wird.
Call Trace: Unable to handle kernel paging request at virtual address ffff80007e150000 CPU: 2 UID: 0 PID: 6236 Comm: ping Kdump: loaded Not tainted 7.0.0-rc1+ #6 PREEMPT ... percpu_counter_add_batch+0x3c/0x158 lib/percpu_counter.c:98 (P) dst_release+0xe0/0x110 net/core/dst.c:177 skb_release_head_state+0xe8/0x108 net/core/skbuff.c:1177 sk_skb_reason_drop+0x54/0x2d8 net/core/skbuff.c:1255 dev_kfree_skb_any_reason+0x64/0x78 net/core/dev.c:3469 napi_consume_skb+0x1c4/0x3a0 net/core/skbuff.c:1527 __free_old_xmit+0x164/0x230 drivers/net/virtio_net.c:611 [virtio_net]
free_old_xmit drivers/net/virtio_net.c:1081 [virtio_net]
start_xmit+0x7c/0x530 drivers/net/virtio_net.c:3329 [virtio_net]
...
Reproduktionsschritte: NETDEV="enp3s0"
config_qdisc_route_filter() {
tc qdisc del dev $NETDEV root tc qdisc add dev $NETDEV root handle 1: prio tc filter add dev $NETDEV parent 1:0 \ protocol ip prio 100 route to 100 flowid 1:1 ip route add 192.168.1.100/32 dev $NETDEV realm 100 }
test_ns() {
ip netns add testns ip link set $NETDEV netns testns ip netns exec testns ifconfig $NETDEV 10.0.32.46/24 ip netns exec testns ping -c 1 10.0.32.1 ip netns del testns }
config_qdisc_route_filter
test_ns sleep 2 test_ns
VulDB is the best source for vulnerability data and more expert information about this specific topic.