В ядре Linux устранена следующая уязвимость:
kernfs: исправлено состояние гонки xattr с несколькими суперблоками
Несколько суперблоков с разными пространствами имен могут использовать одно и то же
kernfs_node, когда kernfs_test_super() находит соответствующий корень, но
другое пространство имен. Это означает наличие нескольких индексных дескрипторов из разных
суперблоки могут ссылаться на один и тот же kernfs_node->iattr->xattrs
структура. Уровень VFS удерживает блокировки для каждого индекса только во время операций xattr.
этого недостаточно для сериализации одновременных модификаций xattr на
общий kernfs_node.
Это может привести к возникновению условий гонки в
simple_xattr_set(), где последовательность поиска->замены/удаления отсутствует
атомарны по отношению к операциям из других суперблоков. Исправьте это, защитив операции xattr с помощью существующего хэша.
массив kernfs_locks->open_file_mutex[], который уже используется для
защитить данные открытого файла для каждого узла. Хешированный массив мьютексов предоставляет
масштабируемая сериализация для каждого узла (масштабируется по количеству процессоров, до 1024 блокировок)
в системах с более чем 32 процессорами) с нулевыми затратами памяти.
Изменения:
- Переименуйте open_file_mutex[] в node_mutex[] для отражения двойного назначения.
- Добавлены помощники kernfs_node_lock_ptr() и kernfs_node_lock().
- Защитите вызовы simple_xattr_set() в kernfs_xattr_set() и
kernfs_vfs_user_xattr_set() с хешированным мьютексом
— Обновите файл.c, чтобы использовать новые помощники через оболочки совместимости.
- Обновление документации, объясняющее использование расширенной блокировки.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: kernfs: fix xattr race condition with multiple superblocks Multiple superblocks with different namespaces can share the same kernfs_node when kernfs_test_super() finds a matching root but different namespace. This means multiple inodes from different superblocks can reference the same kernfs_node->iattr->xattrs structure. The VFS layer only holds per-inode locks during xattr operations, which is insufficient to serialize concurrent xattr modifications on the shared kernfs_node. This can lead to race conditions in simple_xattr_set() where the lookup->replace/remove sequence is not atomic with respect to operations from other superblocks. Fix this by protecting xattr operations with the existing hashed kernfs_locks->open_file_mutex[] array, which is already used to protect per-node open file data. The hashed mutex array provides scalable per-node serialization (scaled by CPU count, up to 1024 locks on 32+ CPU systems) with zero memory overhead. Changes: - Rename open_file_mutex[] to node_mutex[] to reflect dual purpose - Add kernfs_node_lock_ptr() and kernfs_node_lock() helpers - Protect simple_xattr_set() calls in kernfs_xattr_set() and kernfs_vfs_user_xattr_set() with the hashed mutex - Update file.c to use new helpers via compatibility wrappers - Update documentation to explain the extended lock usage
Характеристики атаки
Последствия
Строка CVSS v3.1