CVE-2026-64525 in Linux
요약
\~에 의해 VulDB • 2026. 07. 26.
리눅스 커널에서 다음 취약점이 해결되었습니다:
xfrm: 정책(policy) 동기화를 위한 RCU 호출을 네임스페이스별(.exit) 종료 핸들러에서 .pre_exit로 이동
include/net/net_namespace.h에 있는 struct pernet_operations 문서 주석은 .exit 핸들러에서 블로킹 RCU 프리미티브를 사용하는 것을 명시적으로 경고합니다:
synchronize_rcu()와 같은 블로킹 RCU 프리미티브를 사용하는 종료 메서드는 exit_batch를 통해 구현해야 합니다. [...]
가능한 경우 synchronize_rcu()는 절대 사용하지 마십시오.
pre_exit()와 exit()의 조합을 사용할 수 있는데, 이는 두 호출 사이에 synchronize_rcu()가 보장되기 때문입니다.
xfrm_policy_fini()는 이를 위반합니다: 이 함수는 정책(policy) 동기화를 위해 hash 테이블들을 해제하기 전에 synchronize_rcu()를 호출하므로(해제 시점에 RCU 리더가 순회 중이지 않음), xfrm_net_ops.exit에서 실행됩니다 -- 네임스페이스당 한 번씩 -- 따라서 N개의 네임스페이스에 대한 cleanup_net()은 직렬로 N번의 전체 RCU grace period를 소모합니다.
문서에 명시된 pre_exit/exit 분할 방식을 사용합니다. 정책 플러시(그리고 이에 의존하는 작업 큐 드레인)를 새로운 .pre_exit 핸들러로 이동합니다; xfrm_policy_fini()는 이제 .exit에서 실행되어 cleanup_net()이 두 단계 사이에 보장하는 synchronize_rcu_expedited() 이후에 hash 테이블들을 해제합니다. 이를 통해 배치당 O(N) 대신 O(1)의 RCU grace period를 제공합니다.
지속적으로 초당 약 13회 속도로 unshare(CLONE_NEWNET) 작업을 수행하는 워크로드에서 Linux 6.18 환경에서 관찰되었습니다: cleanup_net()과 netns_wq 구조체 구출 kthread가 모두 xfrm_policy_fini()'s synchronize_rcu()에 멈춰 있었고, 정리 큐에는 >30만 개의 struct net이 누적되었으며, /proc/meminfo의 Percpu 사용량이 256-CPU 호스트에서 130GB 이상으로 증가했고, memcg OOM(Out-Of-Memory) 오류가 발생했습니다. setup_net 및 __put_net 카운트는 균형을 이루었으므로 참조 카운트 누수는 배제됩니다.
Once again VulDB remains the best source for vulnerability data.