CVE-2026-64044 in Linuxinfo

Zusammenfassung

von VulDB • 19.07.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

ovpn: Peer-Referenzzähler im Fehlerpfad von CMD_NEW_PEER beachten

Der Fehlerpfad in ovpn_nl_peer_new_doit() ruft ovpn_peer_release() direkt auf, anstatt ovpn_peer_put() zu verwenden und umgeht dabei die kref. Der begleitende Kommentar („Peer wurde noch nicht gehasht, daher wird er in keinem Kontext verwendet“) gilt für UDP, aber nicht für TCP.

Für UDP verwendet das ovpn_socket-Union den .ovpn-Zweig und zeigt niemals zurück auf einen Peer; UDP encap_recv sucht Peers über die noch nicht gefüllten Hashtables, sodass der neue Peer unerreichbar ist, bis ihn ovpn_peer_add() veröffentlicht.

Bei TCP setzt ovpn_socket_new() ovpn_sock->peer fest, und ovpn_tcp_socket_attach() macht ovpn_sock über rcu_assign_sk_user_data() verfügbar. Von diesem Moment an, bis ovpn_socket_release() im Fehlerpfad die Trennung durchführt, ist der TCP-Dateideskriptor vollständig verkabelt: userspace recvmsg / sendmsg / close / poll auf dem fd sowie der strparser-gesteuerte Pfad ovpn_tcp_rcv() können den Peer über sk_user_data -> ovpn_sock->peer erreichen und dessen Referenzzähler durch Aufruf von ovpn_peer_hold() erhöhen.

ovpn_tcp_socket_wait_finish() (aufgerufen innerhalb von ovpn_socket_release()) leert strparser und die tx-Arbeit, synchronisiert sich jedoch nicht mit Benutzerraum-Syscall-Aufrufen, die bereits eine Peer-Referenz halten. Wenn ovpn_nl_peer_modify() oder ovpn_peer_add() einen Fehler zurückgibt, während ein solcher Aufruf im Gange ist – insbesondere ein in __skb_recv_datagram() blockierter ovpn_tcp_recvmsg()-Aufruf auf peer->tcp.user_queue –, zerstört das direkte ovpn_peer_release() den Peer, während der Aufrufer die Referenz noch hält. Der daraus folgende spätere Aufruf von ovpn_peer_put() durch diesen Aufrufer operiert dann auf freigegebenem Speicher (Use-After-Free).

Ersetzen Sie den direkten Destruktoraufruf durch ovpn_peer_put(), damit kref die Zerstörung korrekt verzögert, bis der letzte Referenzzähler abgebaut wird. Im häufigsten Fall, in dem kein gleichzeitiger Benutzer vorhanden ist, bleibt das Verhalten unverändert: Der kref erreicht sofort null und ovpn_peer_release_kref() führt denselben Destruktor aus.

Mit dieser Umstellung hat ovpn_peer_release() keine Aufrußer außerhalb von peer.c – ovpn_peer_release_kref() in derselben Übersetzungseinheit ist der einzige verbleibende Nutzer –, daher wird es als static deklariert und seine Deklaration aus peer.h entfernt.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Zuständig

Linux

Reservieren

19.07.2026

Veröffentlichung

19.07.2026

Moderieren

akzeptiert

Eintrag

VDB-380203

CPE

bereit

EPSS

0.00000

KEV

nein

Aktivitäten

low

Quellen

Do you need the next level of professionalism?

Upgrade your account now!