В ядре Linux устранена следующая уязвимость:
ntfs: исправлена тупиковая ситуация mrec_lock ABBA при переименовании
ntfs_file_fsync(), ntfs_dir_fsync() и __ntfs_write_inode() блокируют
mrec_lock inode перед тем, как взять mrec_lock его родительского каталога.
ntfs_rename() принимает old_ni->mrec_lock и old_dir_ni->mrec_lock.
перед использованием new_ni->mrec_lock для существующей цели или
new_dir_ni->mrec_lock для переименования между каталогами. Это может привести к тупику, когда удерживается ntfs_file_fsync() или __ntfs_write_inode().
целевой индексный дескриптор или когда ntfs_dir_fsync() содержит дочернюю цель
каталог, а rename() удерживает родительский каталог и ожидает
цель. Исправьте это, заблокировав существующий целевой индексный дескриптор перед тем, как брать какой-либо родительский дескриптор.
каталог mrec_lock.
Для переименований между каталогами, где целевой родительский элемент
является потомком исходного родителя, заблокируйте целевого родителя перед
исходный родительский элемент, чтобы порядок каталогов соответствовал используемому порядку от дочернего к родительскому
с помощью ntfs_file_fsync(), ntfs_dir_fsync() и __ntfs_write_inode().
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: ntfs: fix mrec_lock ABBA deadlock in rename ntfs_file_fsync(), ntfs_dir_fsync() and __ntfs_write_inode() lock an inode's mrec_lock before taking the mrec_lock of its parent directory. ntfs_rename() takes old_ni->mrec_lock and old_dir_ni->mrec_lock before taking new_ni->mrec_lock for an existing target, or new_dir_ni->mrec_lock for a cross-directory rename. This can deadlock when ntfs_file_fsync() or __ntfs_write_inode() holds the target inode, or when ntfs_dir_fsync() holds a child target directory, while rename() holds the parent directory and waits for the target. Fix this by locking the existing target inode before taking any parent directory mrec_lock. For cross-directory renames where the target parent is a descendant of the source parent, lock the target parent before the source parent so the directory order matches the child-to-parent order used by ntfs_file_fsync(), ntfs_dir_fsync(), and __ntfs_write_inode().