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

Сводка

по VulDB • 04.09.2026

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

mm/hugetlb: исправление повреждения записей swap при очистке флага uffd-wp в функции fork()

Функция copy_hugetlb_page_range() очищает бит uffd-wp для миграционных (migration) и аппаратных ошибок (hwpoison) записей с помощью huge_pte_clear_uffd_wp(), которая оперирует позицией бита present-PTE. Состояние uffd-wp у записей swap хранится в другом месте — ветка migration читает и устанавливает его через pte_swp_uffd_wp() и pte_swp_mkuffd_wp(). Позиция present-PTE попадает в полезную нагрузку (payload) записи swap. На архитектуре x86-64 она оказывается в инвертированном смещении swap, где у естественно выровненного PFN hugetlb всегда установлен затронутый бит; следовательно, операция очистки увеличивает закодированный PFN на две страницы.

Для реализации атаки не требуется участие userfaultfd: очистка защищена только тем фактом, что дочерняя VMA (Virtual Memory Area) не зарегистрирована как uffd-wp, поэтому обычный вызов fork() с находящейся в процессе миграции записью hugetlb (или страницей hugetlb с аппаратной ошибкой) приводит к повреждению записи, копируемой в дочерний процесс. Инструментирование операции очистки и выполнение fork() после MADV_HWPOISON на анонимной странице hugetlb размером 2 МБ демонстрирует:

offset before=120e00 offset after =120e02

Последствия носят преимущественно латентный характер: обходы rmap (reverse mapping) сопоставляют миграционные записи по диапазону folio, а remove_migration_pte() восстанавливает PTE из folio, поэтому смещение PFN внутри одного folio исправляется после завершения миграции. Однако любой путь, который заново кодирует поврежденное смещение — например, hugetlb_change_protection(), перезаписывающая доступную для записи миграционную запись через make_readable_migration_entry(swp_offset(entry)) — распространяет это повреждение.

Миграционные записи легитимно содержат флаг uffd-wp, поэтому его следует очищать с помощью pte_swp_clear_uffd_wp(), что соответствует поведению copy_nonpresent_pte() и move_huge_pte().

С другой стороны, запись hwpoison никогда не содержит бит uffd-wp: она устанавливается заново функцией make_hwpoison_entry() (try_to_unmap_one() не сохраняет флаг uffd-wp на пути hwpoison), а hugetlb_change_protection() оставляет записи hwpoison без изменений. Там нечего было очищать, только повреждение, поэтому операция очистки полностью удаляется.

Be aware that VulDB is the high quality source for vulnerability data.

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

Linux

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

26.08.2026

Раскрытие

04.09.2026

Модерация

принято

Вход

VDB-399091

EPSS

0.00000

KEV

Нет

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

Очень низкий

Источники

Do you want to use VulDB in your project?

Use the official API to access entries easily!