CVE-2026-98918 in Linux정보

요약

\~에 의해 VulDB • 2026. 10. 23.

리눅스 커널에서 다음 취약점이 해결되었습니다:

mm/damon/ops-common: damon_ptep_mkold()에서 페이지 정렬(page-aligned) 주소를 사용함

__damon_va_prepare_access_check()은 영역(region) 내의 무작위 바이트 주소를 선택하여 r->sampling_addr에 저장합니다. damon_va_mkold()는 이를 페이지 테이블 순회(page table walk)로 전달하며, 이는 damon_ptep_mkold()에게 샘플링할 페이지의 주소로서 다음과 같이 전달됩니다:

damon_va_mkold(mm, r->sampling_addr) damon_va_walk_page_range(mm, addr, addr + 1) damon_mkold_pmd_entry() damon_ptep_mkold(pte, vma, addr) ptep_test_and_clear_young(vma, addr, pte) mmu_notifier_clear_young(mm, addr, addr + PAGE_SIZE)

arm64 아키텍처의 경우, 커밋 6f0e1142173a("arm64: mm: support batch clearing of the young flag for large folios") 이전에는 contpte 헬퍼가 정렬된 하위(page table pointer를 아래로 내린) 주소에서 정확히 CONT_PTES개의 엔트리를 순회했으며, @addr은 각 엔트리에 전달하기 위해만 사용되었으므로 비정렬(unaligned) 값도 무해했습니다:

ptep = contpte_align_down(ptep); addr = ALIGN_DOWN(addr, CONT_PTE_SIZE); for (i = 0; i < CONT_PTES; i++, ptep++, addr += PAGE_SIZE)

이제 순회할 범위는 @addr을 기반으로 합니다: end = addr + nr * PAGE_SIZE를 CONT_PTE_SIZE로 올림(rounded up)합니다. contpte 블록의 마지막 페이지에서 샘플링하는 경우, 하위 페이지 오프셋(sub-page offset)으로 인해 end가 블록 경계를 약간 넘게 되므로, 올림 연산이 전체 블록 하나만큼 더 떨어진 곳에 위치하게 되어 순회가 샘플링된 블록을 넘어선 CONT_PTES개의 엔트리에 대해 PTE_AF를 지웁니다. 페이지 테이블 페이지의 마지막 블록인 경우, 해당 엔트리들은 그 페이지의 끝을 벗어나므로 순회는 다음에 오는 페이지에 데이터를 작성합니다.

arm64(EC2 c/m6g.4xlarge)에서 전체 7.1/7.2 커널 자기 테스트 스위트(kernel selftest suite)를 실행할 때 발생합니다. 커널은 종종 DAMON 테스트 중 또는 직후에 크래시(crash)합니다.

이 오버런(overrun)으로 인한 영향은 페이지 테이블 바로 뒤에 있는 페이지의 상태에 따라 다르므로 단일 시그니처(signature)는 존재하지 않습니다. 해당 페이지가 읽기 전용(read-only)인 경우, 샘플링 경로 자체에서 쓰기 오류(write fault)가 발생합니다:

Unable to handle kernel write to read-only memory at virtual address ffff0003c5d2d000 FSC = 0x0f: level 3 permission fault CM = 0, WnR = 1, TnD = 0, TagAccess = 0 CPU: 10 UID: 0 PID: 3487 Comm: kdamond.2 pc : contpte_test_and_clear_young_ptes+0x70/0xc0 lr : damon_ptep_mkold+0x1e8/0x1f8 Call trace: contpte_test_and_clear_young_ptes+0x70/0xc0 (P) damon_mkold_pmd_entry+0x150/0x170 walk_pmd_range+0x110/0x2b0 walk_pud_range+0x10c/0x208 walk_pgd_range+0x134/0x258 __walk_page_range+0x98/0x1b0 walk_page_range_vma_unsafe+0x90/0x148 walk_page_range_vma+0x28/0x40 damon_va_walk_page_range+0x114/0x2b8 damon_va_prepare_access_checks+0xec/0x1a8 kdamond_fn+0x534/0x770 kthread+0x128/0x138 ret_from_fork+0x10/0x20

그렇지 않은 경우(페이지가 쓰기 가능한 경우), PTE_AF 지우기 작업이 조용히 성공하며, 피해는 나중에 해당 페이지를 소유하고 있는 다른 구성 요소에서 표면화되므로 백트레이스(backtrace)는 DAMON과 무관하며 실행마다 다릅니다.

damon_ptep_mkold() 내에서 ptep_test_and_clear_young() 호출에 페이지 정렬된 주소를 전달합니다. 이는 DAMON이 contpte_test_and_clear_young_ptes()에 도달할 수 있는 유일한 지점입니다. 다른 곳에서는 이 정렬된 주소가 표시되지 않으며, r->sampling_addr 자체는 변경되지 않으므로 샘플링 및 영역(region) 기록(sebookkeeping)의 의미론(semantics)은 동일하게 유지됩니다.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

책임이 있는

Linux

예약하다

2026. 09. 25.

모더레이션

수락

항목

VDB-425689

EPSS

0.00000

출처

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!