В ядре Linux устранена следующая уязвимость:
ntfs: исправлено WARN_ON для резидентного атрибута в ntfs_map_runlist_nolock(). Когда ntfs_map_runlist_nolock() необходимо найти экстент атрибута
содержащий целевой VCN (ctx_needs_reset == true), он вызывает
ntfs_attr_lookup(), а затем ожидает, что результат будет нерезидентом
атрибут, поскольку только нерезидентные атрибуты имеют пары сопоставлений
массив для распаковки. Созданный образ NTFS может поместить резидентный атрибут вместо нерезидентного.
ожидается один, в результате чего ntfs_attr_lookup() завершится успешно, но вернет
запись резидентного атрибута.
Раньше это ловил только
WARN_ON(), который не останавливает выполнение. Затем код переходит к
прочитайте a->data.non_resident.highest_vcn из того, что на самом деле является резидентом
атрибут, доступ к неправильному члену объединения и повреждение диапазона VCN
проверьте. Путь вызывающего абонента, вызывающий это предупреждение во время монтирования:
ntfs_map_runlist_nolock
ntfs_empty_logfile
load_system_files
ntfs_fill_super
В этом пути ctx имеет значение NULL, поэтому ntfs_map_runlist_nolock() выделяет
временный внутренний контекст поиска и устанавливает ctx_needs_reset = true.
Существующая защита резидентных атрибутов в ветке ctx != NULL уже существует.
молча возвращает -EIO для того же условия; сделайте ctx_needs_reset
согласованный путь путем замены WARN_ON() той же ошибкой -EIO
вернуться. Это приводит к тому, что созданный образ вместо этого отклоняется с ошибкой монтирования.
возникновения предупреждения ядра.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: ntfs: fix WARN_ON for resident attribute in ntfs_map_runlist_nolock() When ntfs_map_runlist_nolock() needs to look up the attribute extent containing a target VCN (ctx_needs_reset == true), it calls ntfs_attr_lookup() and then expects the result to be a non-resident attribute, since only non-resident attributes have a mapping pairs array to decompress. A crafted NTFS image can place a resident attribute where a non-resident one is expected, causing ntfs_attr_lookup() to succeed but return a resident attribute record. Previously this was caught only by a WARN_ON(), which does not stop execution. The code then falls through to read a->data.non_resident.highest_vcn from what is actually a resident attribute, accessing the wrong union member and corrupting the VCN range check. The caller path triggering this warning during mount is: ntfs_map_runlist_nolock ntfs_empty_logfile load_system_files ntfs_fill_super In this path ctx is NULL, so ntfs_map_runlist_nolock() allocates a temporary search context internally and sets ctx_needs_reset = true. The existing resident-attribute guard in the ctx != NULL branch already returns -EIO silently for the same condition; make the ctx_needs_reset path consistent by replacing the WARN_ON() with the same -EIO error return. This causes the crafted image to be rejected with a mount error instead of triggering a kernel warning.
Характеристики атаки
Последствия
Строка CVSS v3.1