CVE-2026-64044 in Linuxinformation

Résumé

par VulDB • 20/07/2026

Dans le noyau Linux, la vulnérabilité suivante a été corrigée :

ovpn: respecter le compteur de références (refcount) du pair dans le chemin d'erreur de CMD_NEW_PEER

Le chemin d'erreur de `ovpn_nl_peer_new_doit()` appelle directement `ovpn_peer_release()` au lieu de `ovpn_peer_put()`, contournant ainsi la structure kref. Le commentaire associé (« le pair n'était pas encore haché, donc il n'est utilisé dans aucun contexte ») est valable pour UDP mais ne l'est pas pour TCP.

Pour UDP, l'union ovpn_socket utilise le membre `.ovpn` et ne pointe jamais vers un pair ; la fonction `UDP encap_recv` recherche les pairs via des tables de hachage qui ne sont pas encore remplies, donc le nouveau pair est inaccessible jusqu'à ce que `ovpn_peer_add()` le rende public.

Pour TCP, `ovpn_socket_new()` définit `ovpn_sock->peer` et `ovpn_tcp_socket_attach()` rend `ovpn_sock` visible via `rcu_assign_sk_user_data()`. À partir de cet instant jusqu'à ce que `ovpn_socket_release()` détache la connexion dans le chemin d'erreur, le descripteur de fichier (fd) TCP est entièrement connecté : les appels système utilisateurs (`recvmsg`, `sendmsg`, `close`, `poll`) sur le fd, ainsi que le chemin `ovpn_tcp_rcv()` piloté par strparser, peuvent atteindre le pair via `sk_user_data -> ovpn_sock->peer` et incrémenter son compteur de références via `ovpn_peer_hold()`.

La fonction `ovpn_tcp_socket_wait_finish()` (appelée à l'intérieur de `ovpn_socket_release()`) vide la file d'attente strparser et le travail de transmission (tx), mais ne se synchronise pas avec les appelants des systèmes utilisateurs qui détiennent déjà une référence au pair. Si `ovpn_nl_peer_modify()` ou `ovpn_peer_add()` renvoie une erreur pendant qu'un tel appelant est en cours d'exécution – notamment un `ovpn_tcp_recvmsg()` bloqué dans `__skb_recv_datagram()` sur la file utilisateur TCP du pair (`peer->tcp.user_queue`) –, l'appel direct à `ovpn_peer_release()` détruit le pair alors que l'appelant détient encore sa référence, et le futur appel à `ovpn_peer_put()` issu de cet appelant opère sur une mémoire déjà libérée.

Remplacer l'appel au destructeur direct par `ovpn_peer_put()` permet au kref de différer correctement la destruction jusqu'à ce que la dernière référence soit relâchée. Dans le cas courant où aucun utilisateur concurrent n'est présent, le comportement reste inchangé : le compteur kref atteint zéro immédiatement et `ovpn_peer_release_kref()` exécute le même destructeur.

Avec cette conversion, `ovpn_peer_release()` ne possède plus d'appelants en dehors de peer.c – seul `ovpn_peer_release_kref()`, situé dans la même unité de traduction, reste utilisateur –, il est donc rendu statique et sa déclaration est supprimée du fichier peer.h.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Responsable

Linux

Réserver

19/07/2026

Divulgation

19/07/2026

Modérer

accepté

Entrée

VDB-380203

CPE

prêt

EPSS

0.00000

KEV

non

Activités

faible

Sources

Want to know what is going to be exploited?

We predict KEV entries!