В ядре Linux устранена следующая уязвимость:
fs: ntfs3: исправлен бесконечный цикл, запускаемый ATTR_LIST нулевого размера. Мы обнаружили ошибку бесконечного цикла в файловой системе ntfs3, которая может привести к
Состояние отказа в обслуживании (DoS). Неверно сформированный образ NTFS может вызвать бесконечный цикл, если атрибут ATTR_LIST
указывает нулевой размер данных, пока драйвер выделяет для них память.
Когда ntfs_load_attr_list() обрабатывает резидентный ATTR_LIST с установленным data_size
до нуля, он все равно выделяет память из-за al_aligned(0). Это создает
несогласованное состояние, где ni->attr_list.size равно нулю, но ni->attr_list.le
ненулевой. Это приводит к тому, что ni_enum_attr_ex ошибочно предполагает, что ни один атрибут
list существует и перечисляет только основную запись MFT.
Когда он находит
ATTR_LIST, код перезагружает его и перезапускает перечисление, повторяя
на неопределенный срок. Операция монтирования никогда не завершается, что приводит к зависанию потока ядра. Этот патч добавляет проверку, гарантирующую, что data_size не равен нулю перед использованием памяти.
распределение.
При обнаружении ATTR_LIST нулевого размера функция возвращает
-EINVAL, предотвращающий DoS-уязвимость.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: fs: ntfs3: fix infinite loop triggered by zero-sized ATTR_LIST We found an infinite loop bug in the ntfs3 file system that can lead to a Denial-of-Service (DoS) condition. A malformed NTFS image can cause an infinite loop when an ATTR_LIST attribute indicates a zero data size while the driver allocates memory for it. When ntfs_load_attr_list() processes a resident ATTR_LIST with data_size set to zero, it still allocates memory because of al_aligned(0). This creates an inconsistent state where ni->attr_list.size is zero, but ni->attr_list.le is non-null. This causes ni_enum_attr_ex to incorrectly assume that no attribute list exists and enumerates only the primary MFT record. When it finds ATTR_LIST, the code reloads it and restarts the enumeration, repeating indefinitely. The mount operation never completes, hanging the kernel thread. This patch adds validation to ensure that data_size is non-zero before memory allocation. When a zero-sized ATTR_LIST is detected, the function returns -EINVAL, preventing a DoS vulnerability.