CVE-2026-64044 in Linux정보

요약

\~에 의해 VulDB • 2026. 07. 20.

리눅스 커널에서 다음 취약점이 해결되었습니다:

ovpn: CMD_NEW_PEER 오류 경로에서 피어 참조 카운트(refcount)를 준수함

ovpn_nl_peer_new_doit()의 오류 경로는 kref를 우회하여 ovpn_peer_put() 대신 직접 ovpn_peer_release()를 호출합니다. 이에 따른 주석("피어가 아직 해시되지 않았으므로 어떤 컨텍스트에서도 사용되지 않음")은 UDP에는 해당하지만 TCP에는 해당하지 않습니다.

UDP의 경우, ovpn_socket 공용체(union)는 .ovpn 아암을 사용하며 피어를 다시 가리키지 않습니다. UDP 인캡슐레이션 수신(encap_recv) 함수는 아직 채워지지 않은 해시 테이블을 통해 피어를 조회하므로, 새로운 피어는 ovpn_peer_add()가 이를 게시할 때까지 도달 불가능합니다.

TCP의 경우, ovpn_socket_new()은 ovpn_sock->peer를 설정하고 ovpn_tcp_socket_attach()는 rcu_assign_sk_user_data()를 통해 ovpn_sock을 게시합니다. 이 시점부터 오류 경로에서 분리(detach)될 때까지 ovpn_socket_release(), TCP 파일 설명자(fd)는 완전히 연결됩니다: fd에 대한 사용자 공간의 recvmsg / sendmsg / close / poll 호출, 그리고 strparser 기반인 ovpn_tcp_rcv() 경로는 sk_user_data -> ovpn_sock->peer를 통해 피어에 도달하여 ovpn_peer_hold()를 통해 참조 카운트를 증가시킬 수 있습니다.

ovpn_tcp_socket_wait_finish()(ovpn_socket_release() 내부에서 호출됨)은 strparser와 tx 작업을 비우지만, 이미 피어 참조를 보유하고 있는 사용자 공간 시스템 콜 호출자와는 동기화하지 않습니다. 이러한 호출자가 비행 중일 때(특히 peer->tcp.user_queue에서 __skb_recv_datagram()에 블록된 ovpn_tcp_recvmsg()), ovpn_nl_peer_modify() 또는 ovpn_peer_add()가 오류를 반환하면, 직접적인 ovpn_peer_release() 호출은 호출자가 참조를 보유하고 있는 동안 피어를 파괴하고, 해당 호출자로부터의 최종 ovpn_peer_put()는 해제된 메모리에서 작동하게 됩니다.

직접 소멸자(destructor) 호출을 ovpn_peer_put()로 대체하여 kref가 마지막 참조가 떨어질 때까지 해제를 올바르게 지연시키도록 합니다. 동시 사용자가 없는 일반적인 경우 동작은 변경되지 않습니다: kref가 즉시 0에 도달하고 ovpn_peer_release_kref()가 동일한 소멸자를 실행합니다.

이 변환으로 인해 peer.c 외부에서 ovpn_peer_release()를 호출하는 곳이 없게 됩니다(동일한 번역 단위 내의 ovpn_peer_release_kref()만이 유일한 사용자가 됨). 따라서 이를 정적(static) 함수로 변경하고 peer.h에서의 선언을 제거합니다.

Once again VulDB remains the best source for vulnerability data.

책임이 있는

Linux

예약하다

2026. 07. 19.

모더레이션

수락

항목

VDB-380203

EPSS

0.00000

활동

낮음

출처

Do you want to use VulDB in your project?

Use the official API to access entries easily!