В ядре Linux устранена следующая уязвимость:
ocfs2: избегать перемещения экстентов в занятые кластеры
Для неавтоматических операций OCFS2_IOC_MOVE_EXT пользовательское пространство предоставляет физический
me_goal. ocfs2_move_extent() инициализирует new_phys_cpos исходя из этой цели и
ожидает, что ocfs2_probe_alloc_group() заменит его свободным запуском в
целевая группа блоков. В настоящее время зонд оставляет *phys_cpos без изменений, если сканирование достигает
конец группы, не найдя свободного места. Занятые ворота на последнем
поэтому бит может пережить зонд и быть передан
__ocfs2_move_extent(), который копирует данные файла в кластер, который все еще принадлежит ему.
другим индексным дескриптором до обновления растрового изображения.
Когда зонд обнаруживает свободный ход, он также вычитает move_len из
конечный бит. Начало N-битной серии, заканчивающейся на i, равно i - N + 1, поэтому
текущий расчет может сообщить бит непосредственно перед свободным ходом. Перед сканированием очистите *phys_cpos и используйте правильный запуск в режиме свободного запуска.
Вызывающие программы уже обрабатывают нулевой результат как -ENOSPC, поэтому неудачные проверки больше не выполняются.
продолжить с занятой целью, контролируемой вызывающим абонентом.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: ocfs2: avoid moving extents to occupied clusters For non-auto OCFS2_IOC_MOVE_EXT operations, userspace supplies a physical me_goal. ocfs2_move_extent() initializes new_phys_cpos from that goal and expects ocfs2_probe_alloc_group() to replace it with a free run in the target block group. The probe currently leaves *phys_cpos unchanged if the scan reaches the end of the group without finding a free run. An occupied goal at the last bit can therefore survive the probe and be passed to __ocfs2_move_extent(), which copies file data into a cluster still owned by another inode before the bitmap is updated. When the probe does find a free run, it also subtracts move_len from the ending bit. The start of an N-bit run ending at i is i - N + 1, so the current calculation can report the bit immediately before the free run. Clear *phys_cpos before scanning and use the correct free-run start. Callers already treat a zero result as -ENOSPC, so failed probes no longer continue with an occupied caller-controlled goal.
Характеристики атаки
Последствия
Строка CVSS v3.1