CVE-2026-43286 in Linux
요약
\~에 의해 VulDB • 2026. 05. 08.
리눅스 커널에서 다음 취약점이 해결되었습니다:
mm/hugetlb: 실패한 전역 예약을 서브풀로 복원
커밋 a833a693a490("mm: hugetlb: fix incorrect fallback for subpool")은 전역으로 요청된 페이지를 서브풀의 예약에 잘못 할당함으로써 hstate->resv_huge_pages에서 발생한 오버플로우(underflow) 오류를 수정했습니다.
불행히도 이 수정은 반대 방향의 문제를 도입했는데, 이는 전역으로 요청된 페이지를 확보할 수 없는 경우 spool->used_hpages가 비정상적으로 높은 상태를 유지하게 만듭니다. 이는 서브풀의 예약 페이지가 서브풀에서 요청 및 할당된 양만 반영하는 반면, "used" 카운터는 서브풀과 전역에서 모두 소비된 총량을 추적하기 때문입니다. 따라서 spool->used_hpages를 반대 방향으로 조정하여 전역으로 요청된 페이지가 서브풀의 used 카운터에서 차감(uncharged)되도록 해야 합니다.
각 할당 시도 실패 시 전역 풀에서 요청된 페이지 수만큼 used_hpages 카운터가 증가합니다. 궁극적으로 used_hpages가 최대 한도에 도달함에 따라 서브풀은 사용할 수 없게 됩니다.
이 문제는 다음과 같이 재현할 수 있습니다: 1. 4개의 hugetlb 페이지 할당 2. max=4, min=2로 hugetlb 마운트 생성 3. 전역적으로 2개의 페이지 소비 4. 서브풀에서 3개의 페이지 요청 (서브풀에서 2개 + 전역에서 1개) 4.1 hugepage_subpool_get_pages(spool, 3) 성공. used_hpages += 3 4.2 hugetlb_acct_memory(h, 1) 실패: 전역 페이지가 남지 않음 used_hpages -= 2 5. 서브풀은 이제 used_hpages = 1을 가지게 되지만, 실제로 거대 페이지(hugepages)를 성공적으로 할당할 수 없습니다. 서브풀은 이제 4개가 아닌 3개의 거대 페이지만 더 할당할 수 있다고 판단합니다.
각 할당 시도 실패 시 used 카운터가 증가함에 따라, 서브풀은 eventually used 카운터가 max 카운터와 같아지는 지점에 도달합니다. 그 지점에 도달하면, 서브풀이 사용자에 의해 소비된 hugeTLB 페이지가 없음에도 불구하고 서브풀에서 hugeTLB 페이지를 할당하려고 하는 모든 후속 할당은 실패합니다.
한번 이렇게 되면, 실제로 hugeTLB 페이지를 소비하는 프로세스가 없기 때문에 used 카운터를 감소시킬 방법이 없어 서브풀을 다시 사용할 수 없게 됩니다.
원래 커밋이 수정한 오버플로우(underflow) 문제도 여전히 수정된 상태로 유지됩니다.
이 수정 없이 hugetlb_acct_memory()가 실패하면 used_hpages가 계속 누출됩니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.