В ядре Linux устранена следующая уязвимость:
eventfs: используйте дочернее поле для головы rcu и добавьте барьеры памяти. Когда индексный дескриптор eventfs освобождается, он устанавливает ei->is_freed, а затем использует его
ei->list, чтобы добавить его в список ссылок srcu, поскольку поле списка представляет собой объединение с
заголовок списка rcu. Поскольку список ei-> используется для перебора SRCU
защищенный список без использования eventfs_mutex, ничто не мешает
итерация по этому списку, чтобы увидеть ei->rcu вместо ei->list
и он прочитает поврежденную цель.
Чтобы это исправить, измените объединение заголовка списка rcu со списком дочерних элементов. Освободив индексный дескриптор eventfs, установите is_free и выполните smp_wmb().
перед добавлением индексного дескриптора eventfs в список SRCU. При повторении списка ei->children в начале выполните smp_rmb().
а затем прочитайте is_freed ei, чтобы убедиться, что список дочерних элементов все еще
действительный.
Если установлен is_freed, то чтение ei_child недействительно и
цикл должен завершиться немедленно.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: eventfs: Use children field for rcu head and add memory barriers When an eventfs inode is freed, it sets ei->is_freed and then uses its ei->list to add it to the srcu link list as the list field is a union with the rcu list head. As the ei->list is used to iterate over an SRCU protected list without taking the eventfs_mutex, there's nothing stopping the iteration over that list to see the ei->rcu instead of the ei->list and it will read a corrupt target. To fix this, change the union of the rcu list head with the children list. On freeing the eventfs inode, set the is_free and execute a smp_wmb() before adding the eventfs inode to the SRCU list. On iteration of the ei->children list, at the start, execute a smp_rmb() and then read the is_freed of the ei to see if the children list is still valid. If is_freed is set, then the ei_child read is not valid and the loop should exit immediately.
Характеристики атаки
Последствия
Строка CVSS v3.1