В ядре Linux устранена следующая уязвимость: f2fs: аннулировать зубной кэш на неудачном создании белого F2FS может монтировать файловые сис…
В ядре Linux устранена следующая уязвимость: f2fs: аннулировать зубной кэш на неудачном создании белого F2FS может монтировать файловые системы с поврежденными значениями глубины каталога, которые получить время выполнения-зажимается на MAX_DIR_HASH_DEPTH. Когда RENAME_WHITEOUT операции выполняются по таким каталогам, f2fs_rename выполняет изменения каталога (обновление целевого входа и удаление источника вход) перед попыткой добавить запись whiteout через f2fs_add_link. Если f2fs_add_link терпит неудачу из-за поврежденной структуры каталога, функция возвращает ошибку в VFS, но частичный каталог Модификации уже были выполнены на диске. VFS предполагает, что вся операция переименования не удалась и не обновляет кэш денти, Оставляя несвежие карты. На пути ошибки VFS не вызывает d_move() для обновления dentry Кэш. Это приводит к new_dentry, все еще указывающей на старый inode (new_inode), который уже сократил свой i_nlink до нуля. Устаревший кэш заставляет последующие операции неправильно ссылаться Освобожденный иноде. Это приводит к тому, что последующие операции используют кэшированную информацию о зубных протезах, которая Больше не соответствует состоянию на диске. Когда второе переименование нацелено на той же запись, VFS пытается уменьшить i_nlink на устаревшем иноде, который может уже иметь i_nlink=0, вызывая WARNING в drop_nlink(). Пример последовательности: 1. Первое переименование (RENAME_WHITEOUT): file2 → file1 - f2fs обновляет файл1 запись на диске (точки на inode 8) - f2fs удаляет файл2 запись на диск - f2fs_add_link(whiteout) провалы (коррумпированный каталог) - Возвращает ошибку в VFS - VFS не вызывает d_move() из-за ошибки - Кэш VFS по-прежнему имеет: file1 → inode 7 (устаревшего!) - inode 7 имеет i_inlink=0 (уже декретирован) 2. 2. Второе переименование: file3 → file1 - VFS использует несвежий кэш: файл1 → inode 7 - Пытается drop_nlink на inode 7 (i_nlink уже 0) - ВНИМАНИЕ в drop_nlink() Исправьте это, явно опровергнув old_dentry и new_dentry, когда f2fs_add_link терпит неудачу во время создания whiteout. Это вынуждает VFS обновление с диска на последующих операциях, обеспечивая согласованность кэша Даже если переименование частично удается. Репродюсер: 1. Изображение горы F2FS с поврежденным i_current_depth 2. renameat2(file2, файл1, RENAME_WHITEOUT) 3. renameat2(file3, file1, 0) 4. 4. Системные триггеры предупреждение в drop_nlink()
| Продукт | Вендор | Статус |
|---|---|---|
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux-5.10 | Отслеживается | |
| linux-6.1 | Отслеживается | |
| linux-allwinner-5.19 | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается |