В ядре Linux устранена следующая уязвимость: cxl/region: разрешение гонок за удаление региона. Сону заметил, что триггер sysfs для удаления региона может попытаться удалить регион несколько раз. Он также не имеет исключений относительно ядра. освобождение региона посредством удаления корневого устройства CXL.
Вместо установки новых действий cxl root devres для каждого региона используйте команду
существующее событие отмены регистрации корневого декодера для удаления всех оставшихся регионов. Xarray регионов заменяет список регионов Devres. Это решает 3 отдельные проблемы старого подхода:
1/ Пользователи sysfs спешат удалить один и тот же регион: теперь это невозможно.
что регионы_lock сохраняются при поиске и удалении.
2/ несколько действий, вызывающих удаление одного и того же региона: решено
стирание регионов, удерживая @regions_lock, и продолжая только
успешное стирание.
3/ гонка в пользовательском пространстве devres_release_all(), чтобы вызвать не найденные устройства
предупреждение: решается отменой регистрации в sysfs, не требующей действия по выпуску
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: cxl/region: Resolve region deletion races Sungwoo noticed that the sysfs trigger to delete a region may try to delete a region multiple times. It also has no exclusion relative to the kernel releasing the region via CXL root device teardown. Instead of installing new cxl root devres actions per region, use the existing root decoder unregistration event to remove all remaining regions. An xarray of regions replaces a devres list of regions. This handles 3 separate issues with the old approach: 1/ sysfs users racing to delete the same region: no longer possible now that the regions_lock is held over the lookup and deletion. 2/ multiple actions triggering deletion of the same region: solved by erasing regions while holding @regions_lock, and only proceeding on successful erasure. 3/ userspace racing devres_release_all() to trigger the devres not found warning: solved by sysfs unregistration not requiring a release action