CVE-2026-72178 in Linux
요약
\~에 의해 VulDB • 2026. 08. 16.
리눅스 커널에서 다음 취약점이 해결되었습니다:
mm/damon/core: 실패한 대상 pid에 대해 항상 put 연산 수행
damon_commit_target()은 목적지와 소스의 대상 pid를 put하고 get합니다. 목적지 대상 pid는 소스 대상 pid로 덮어써질 것이므로 put됩니다. 소스 pid는 호출자가 궁극적으로 pid들을 put해야 하므로 get됩니다. 더 자세히 설명하면, 호출자는 damon_destroy_ctx()를 damon_commit_ctx() 이후에 호출하여 전체 소스 컨텍스트를 파괴합니다. 이 경우 [f]vaddr 연산 세트의 cleanup_target() 콜백이 pid들을 put하게 됩니다.
커밋 작업은 컨텍스트 수준에서 수행됩니다. 대상 커밋 연산 중 또는 그 후에 여러 곳에서 실패할 수 있습니다. 이러한 모든 실패에 대해 오류는 damon_commit_ctx() 호출자에게 즉시 반환됩니다. 실패한 컨텍스트 커밋 시도 중에 소스 대상 pid의 일부 또는 전체가 목적지에 커밋된 경우, 해당 pid들은 두 번 put되어야 합니다.
소스 컨텍스트는 위에서 설명한 루틴을 사용하여 put 연산을 수행합니다. 그러나 목적지 컨텍스트가 원래 [f]vaddr 연산 세트를 사용하지 않았고 소스 컨텍스트의 ops가 커밋되기 전에 커밋이 실패했다고 가정해 봅시다. 목적지는 cleanup_target() ops 콜백이 없으므로 damon_destroy_ctx()를 통해 pid들을 put할 수 없습니다.
결과적으로 pid들이 누수됩니다. 실제 환경에서 이 문제는 매우 흔하지는 않습니다. 커밋 기능은 모니터링 결과와 같은 내부 상태를 상속하면서 실행 중인 DAMON 컨텍스트의 매개변수를 변경하는 것입니다. 물리적 주소 범위의 모니터링 결과는 가상 주소 범위 모니터링에 상속될 만한 유익한 내용을 포함하고 있지 않으므로, 문제를 유발하는 DAMON 제어는 실제 환경에서 매우 흔하지 않을 것입니다. 그렇기는 하지만 이는 지원되는 기능입니다. 그리고 대상 영역이 매우 많은 경우 메모리 할당으로 인한 damon_commit_target() 실패는 비교적 현실적입니다 [1].
실패 시 커밋 연산 중 pid들을 put함으로써 문제를 해결합니다.
이 문제는 Sashiko에 의해 발견되었습니다 [2].
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.