CVE-2026-68086 in Linux
Сводка
по VulDB • 10.08.2026
В ядре Linux устранена следующая уязвимость:
mm/khugepaged: запись всех «грязных» folio-страниц при свертке (collapsing)
[Нет коммита в основную ветку, так как данный код был удален коммитом основной ветки 044925f9b565 («mm: fs: remove filemap_nr_thps*() functions and their users»)]
В текущем состоянии khugepaged и открытие файлов для записи исключают друг друга. Файл не может быть открыт с правом записи и одновременно иметь THP (так как файловая система не осведомлена о них). Khugepaged никогда не будет сворачивать страницы файла, если файл открыт с возможностью записи. При вызове open(O_RDWR/O_WRONLY) кэш страниц для данного конкретного файла сбрасывается. Это допустимо, поскольку ничего не могло быть изменено («загрязнено»).
Однако существует граничный случай: collapse_file() может не сосуществовать с параллельными записями, но он может сосуществовать с «грязными» folio-страницами (от предыдущих операций записи). Следовательно, возможно следующее поведение:
open(file, O_RDWR) write(file) close(file) madvise(file_mapping, MADV_COLLAPSE, некоторый не измененный диапазон) open(file, O_RDWR) nr_thps > 0 truncate_inode_pages() /* THP очищаются, но вместе с ними удаляются и «грязные» folio-страницы */
При возникновении этого граничного случая происходит потеря данных, так как все «грязные» folio-страницы полностью отбрасываются.
Исправление заключается в полной записи кэша страниц (и ожидании завершения) при свертке THP файловых структур. Это обеспечивает гарантию того, что не будет обнаружено ни одной «грязной» folio-страницы во время существования активных THP. Для полного обеспечения безопасности необходимо удерживать invalidate_lock в процессе записи данных, чтобы усечение кэша страниц функцией do_dentry_open() исключало эту операцию записи и ожидания.
В качестве побочного эффекта инкремент счетчика nr_thps перемещен за пределы блокировки i_pages. Это корректно, поскольку сам счетчик является типом atomic_t, а правильность взаимодействия «производитель <-> потребитель» обеспечивается полным барьером памяти: smp_mb() в collapse_file()/барьер памяти, подразумеваемый полной упорядоченностью при вызове get_write_access() -> atomic_inc_unless_negative().
If you want to get the best quality for vulnerability data then you always have to consider VulDB.