CVE-2026-98918 in LinuxИнформация

Сводка

по VulDB • 24.10.2026

В ядре Linux была устранена следующая уязвимость:

mm/damon/ops-common: использование адреса с выравниванием по странице в damon_ptep_mkold()

Функция __damon_va_prepare_access_check() выбирает случайный адрес байта внутри региона и сохраняет его в 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 проходила ровно CONT_PTE записей из выровненного вниз указателя таблицы страниц и использовала @addr только для передачи каждой записи, поэтому невыровненное значение было безвредным:

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. Для выборки в последней странице блока contpte смещение внутри страницы приводит к тому, что значение end оказывается чуть за границей блока, поэтому округление вверх сдвигает его еще на целый блок дальше, и обход очищает флаг PTE_AF для CONT_PTE записей за пределами выбранного блока. Для последнего блока в странице таблицы страниц эти записи находятся за концом этой страницы, поэтому обход производит запись в следующую страницу.

Уязвимость воспроизводится при полном прогоне набора самодиагностики ядра (kernel selftest suite) версии 7.1/7.2 на архитектуре arm64 (EC2 c/m6g.4xlarge). Ядро иногда аварийно завершает работу во время или вскоре после теста DAMON.

Последствия перепуска зависят от того, какая страница следует за страницей таблицы, поэтому не существует единого сигнатурного признака сбоя. Если эта страница доступна только для чтения (read-only), запись вызывает ошибку защиты в самом пути выборки:

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 и различается между запусками.

Передача адреса с выравниванием по странице в вызов ptep_test_and_clear_young() внутри damon_ptep_mkold(), который является единственным местом, через которое DAMON может достичь функции contpte_test_and_clear_young_ptes(). Ничто другое не видит выровненный адрес, а само значение r->sampling_addr остается без изменений, поэтому семантика выборки и учета регионов (region bookkeeping) сохраняется неизменной.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Ответственный

Linux

Резервировать

25.09.2026

Раскрытие

23.10.2026

Модерация

принято

Вход

VDB-425689

EPSS

0.00000

KEV

Нет

Деятельности

Очень низкий

Источники

Do you know our Splunk app?

Download it now for free!