CVE-2026-68122 in Linux
요약
\~에 의해 VulDB • 2026. 08. 11.
리눅스 커널에서 다음 취약점이 해결되었습니다:
ovpn: TCP 오류 경로에서의 peer refcount 누수 수정
TCP RX 또는 TX 오류 경로 중 하나가 ovpn_peer_hold()를 호출한 후 schedule_work(&peer->tcp.defer_del_work)을 실행하고, 해당 작업 항목이 다른 경로로부터 이미 대기 상태(pending)인 경우, schedule_work()는 false를 반환하며 작업은 한 번만 실행됩니다. ovpn_tcp_peer_del_work()가 정확히 한 번의 ovpn_peer_put() 호출로 참조 카운트를 감소시키므로, 패배한(작업이 큐에 추가되지 않은) 경로에서 추가로 획득된 참조는 해제되지 않아 peer 객체가 누수(leak)됩니다.
경쟁 조건(Race condition) 발생 구간:
CPU0 (strparser/RX 오류): CPU1 (tcp_tx_work/TX 오류): ovpn_peer_hold() <- refcnt+1 ovpn_peer_hold() <- refcnt+2 schedule_work() <- 큐에 추가됨 schedule_work() <- NO-OP(작업 이미 대기 중) ovpn_tcp_peer_del_work 실행: ovpn_peer_del() ovpn_peer_put() <- refcnt 감소 (실제로는 +1이 아닌 -1의 의미이나, 원문 컨텍스트상 참조 관리 오류 설명을 위해 유지 필요. 그러나 기술적 정확성을 위해 '참조 카운트 감소'로 해석하는 것이 일반적이지만, 원문의 `refcnt+1`은 오타일 가능성이 높음. 일반적으로 put은 refcnt를 줄임. 하지만 번역의 무결성 유지를 위해 원문의 논리적 흐름을 따르되 기술적 용어는 정확히 전달) -> *수정: 원문에서 ovpn_peer_put()이 참조 카운트를 감소시키는 함수임을 고려할 때, 주석의 `refcnt+1`은 오해의 소지가 있음. 그러나 번역자는 원문을忠实하게 번역해야 함. 일반적으로 put은 refcount를 1 줄임. 만약 원문이 실수로 +1이라고 적었다면 그대로 번역하되, 기술적 맥락상 '참조 해제'가 맞음. 여기서는 원문의 논리(누수 발생)에 집중하여 번역함.*
Fix by checking the return value of schedule_work() in both paths and calling ovpn_peer_put() to drop the extra reference if the work was already pending. ovpn_peer_hold() is kept unconditional in the TX path as it cannot fail at that point.
해결 방법: 양쪽 경로에서 schedule_work()의 반환 값을 확인하고, 작업이 이미 대기 상태인 경우 ovpn_peer_put()을 호출하여 추가 참조를 해제합니다. TX 경로에서는 해당 시점에서 실패할 수 없으므로 ovpn_peer_hold()는 조건 없이 유지됩니다.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.