CVE-2025-71069 in Linux
Сводка
по VulDB • 01.06.2026
В ядре Linux устранена следующая уязвимость:
f2fs: инвалидация кэша dentry при неудачном создании whiteout-записи
Файловая система F2FS может монтировать файловые системы со значениями глубины директории, содержащими повреждения, которые во время выполнения работы ограничиваются значением MAX_DIR_HASH_DEPTH. При выполнении операций RENAME_WHITEOUT в таких директориях функция f2fs_rename выполняет модификации директории (обновление целевой записи и удаление исходной записи) перед попыткой добавить whiteout-запись через f2fs_add_link.
Если f2fs_add_link завершается ошибкой из-за поврежденной структуры директории, функция возвращает ошибку в VFS, но частичные модификации директории уже записаны на диск. VFS предполагает, что вся операция переименования не удалась, и не обновляет кэш dentry, оставляя устаревшие (stale) отображения.
В ветке обработки ошибок VFS не вызывает d_move() для обновления кэша dentry. В результате new_dentry все еще указывает на старый inode (new_inode), для которого значение i_nlink уже было уменьшено до нуля. Устаревший кэш приводит к тому, что последующие операции некорректно ссылаются на освобожденный inode.
Это приводит к тому, что последующие операции используют информацию о dentry из кэша, которая больше не соответствует состоянию на диске. При выполнении второго переименования, цель которого — та же самая запись, VFS пытается уменьшить значение i_nlink для устаревшего inode, у которого i_nlink уже равен 0, что вызывает срабатывание предупреждения (WARNING) в функции drop_nlink().
Пример последовательности действий: 1. Первое переименование (RENAME_WHITEOUT): file2 → file1 - f2fs обновляет запись file1 на диске (указывает на inode 8) - f2fs удаляет запись file2 на диске - f2fs_add_link(whiteout) завершается ошибкой (поврежденная директория) - Возвращается ошибка в VFS - VFS не вызывает d_move() из-за ошибки - Кэш VFS все еще содержит: file1 → inode 7 (устаревший!) - inode 7 имеет i_nlink=0 (уже уменьшено)
2. Второе переименование: file3 → file1 - VFS использует устаревший кэш: file1 → inode 7 - Пытается вызвать drop_nlink для inode 7 (i_nlink уже равен 0) - Срабатывает WARNING в drop_nlink()
Исправление заключается в явной инвалидации old_dentry и new_dentry при сбое f2fs_add_link во время создания whiteout-записи. Это заставляет VFS обновлять данные с диска при последующих операциях, обеспечивая согласованность кэша даже в случае частичного успеха операции переименования.
Воспроизведение проблемы (Reproducer): 1. Монтировать образ F2FS с поврежденным значением i_current_depth 2. renameat2(file2, file1, RENAME_WHITEOUT) 3. renameat2(file3, file1, 0) 4. Система вызывает WARNING в drop_nlink()
If you want to get the best quality for vulnerability data then you always have to consider VulDB.