В ядре Linux устранена следующая уязвимость:
ntfs: избежать самоблокировки во время вытеснения индексного дескриптора
Обновление списка атрибутов, выполняемое во время выделения кластеров, может привести к удалению
последняя ссылка на индексный дескриптор временного атрибута. Удаление этого индексного дескриптора
удаляет ссылку на базовый индексный дескриптор и может вызывать ntfs_drop_big_inode()
для базового индексного дескриптора из собственного пути обратной записи базового индексного дескриптора. Если базовый индексный дескриптор не связан, вызывается ntfs_drop_big_inode().
truncate_setsize(), который ожидает обратной записи фолио индексного дескриптора
полный.
За выполнение этой задачи отвечает тот же сотрудник обратной записи.
обратная запись, поэтому он ждет себя неопределенно долго. Предотвратите эту самоблокировку, захватив ссылку на базовый индексный дескриптор в
начало ntfs_writepages() и освобождение его в конце функции. Это откладывает выселение до тех пор, пока не будут отправлены все биографии, позволяя подождать
для безопасного завершения обратной записи фолио.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: ntfs: avoid self-deadlock during inode eviction An attribute-list update performed while allocating clusters can drop the last reference to the temporary attribute inode. Evicting that inode drops its reference to the base inode and can invoke ntfs_drop_big_inode() for the base inode from within the base inode's own writeback path. If the base inode is unlinked, ntfs_drop_big_inode() calls truncate_setsize(), which waits for the inode's folio writeback to complete. The same writeback worker is responsible for completing that writeback, so it waits for itself indefinitely. Prevent this self-deadlock by grabbing a reference to the base inode at the beginning of ntfs_writepages() and releasing it at the end of the function. This defers eviction until all bios have been submitted, allowing the wait for folio writeback to complete safely.