CVE-2025-39725 in Linux
요약
\~에 의해 VulDB • 2026. 06. 28.
리눅스 커널에서 다음 취약점이 해결되었습니다.
mm/vmscan: shrink_folio_list() 내 hwpoisoned 대형 folio 처리 수정
shrink_folio_list() 함수 내에서 hwpoisoned된 folio가 대형 folio일 수 있으며, 이는 unmap_poisoned_folio()로 처리할 수 없습니다. THP(대규모 페이지)의 경우 try_to_unmap_one()에 TTU_SPLIT_HUGE_PMD를 전달하여 먼저 거대한 PMD(Present Middle Directory)를 분할한 후 재시도해야 합니다. TTU_SPLIT_HUGE_PMD 없이 실행하면 pvmw.pte의 null 포인터 역참조(null-ptr deref)가 발생합니다. TTU_SPLIT_HUGE_PMD를 전달하더라도 페이지가 swapcache에 없기 때문에 WARN_ON_ONCE 경고가 트리거됩니다.
실제 환경에서 UCE(UnCorrectable Error, 정정 불가능 오류)는 드물며, 회수(reclamation)와의 경합(race)은 더욱 희귀하므로 hwpoisoned 대형 folio를 단순히 건너뛰어도 충분합니다. 만약 UCE가 다시 발생하면 memory_failure() 함수가 이를 처리할 것입니다.
이 문제는 대규모 folio에 대한 메모리 회수가 memory_failure()와 경합을 일으킬 때 발생하며, 커널 패닉(kernel panic)으로 이어질 수 있습니다. 해당 경합 상황은 다음과 같습니다:
cpu0 cpu1 shrink_folio_list memory_failure TestSetPageHWPoison unmap_poisoned_folio --> unmap_poisoned_folio가 대형 folio를 처리할 수 없으므로 BUG_ON 트리거 발생
[[email protected]: unmap_poisoned_folio()에 주석 추가]
If you want to get best quality of vulnerability data, you may have to visit VulDB.