В ядре Linux устранена следующая уязвимость:
fs: ntfs3: проверьте возвращаемое значение indx_find, чтобы избежать бесконечного цикла
Мы обнаружили ошибку бесконечного цикла в файловой системе ntfs3, которая может привести к
Состояние отказа в обслуживании (DoS). Неверный формат dentry в файловой системе ntfs3 может привести к зависанию ядра.
во время операций поиска. Установив флаг HAS_SUB_NODE в
INDEX_ENTRY в блоке INDEX_ALLOCATION каталога и манипулируя
указатель VCN, злоумышленник может заставить функцию indx_find() неоднократно
прочитать один и тот же блок, каждый раз выделяя 4 КБ памяти.
Ядру не хватает
Обнаружение петель VCN и ограничения глубины, вызывающие нехватку памяти и OOM
авария. Этот патч добавляет проверку возвращаемого значения для fnd_push(), чтобы предотвратить потерю памяти. Уязвимость исчерпания ресурсов, вызванная бесконечными циклами.
Когда индекс превышает
размера массива fnd->nodes, fnd_push() возвращает -EINVAL. indx_find()
функция проверяет это возвращаемое значение и останавливает обработку, предотвращая дальнейшее
распределение памяти.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: fs: ntfs3: check return value of indx_find to avoid infinite loop We found an infinite loop bug in the ntfs3 file system that can lead to a Denial-of-Service (DoS) condition. A malformed dentry in the ntfs3 filesystem can cause the kernel to hang during the lookup operations. By setting the HAS_SUB_NODE flag in an INDEX_ENTRY within a directory's INDEX_ALLOCATION block and manipulating the VCN pointer, an attacker can cause the indx_find() function to repeatedly read the same block, allocating 4 KB of memory each time. The kernel lacks VCN loop detection and depth limits, causing memory exhaustion and an OOM crash. This patch adds a return value check for fnd_push() to prevent a memory exhaustion vulnerability caused by infinite loops. When the index exceeds the size of the fnd->nodes array, fnd_push() returns -EINVAL. The indx_find() function checks this return value and stops processing, preventing further memory allocation.