В ядре Linux устранена следующая уязвимость:
perf/core: отсоединить группы событий во время удаления_on_exec
perf_event_remove_on_exec() удаляет события, вызывая
perf_event_exit_event(). Для событий верхнего уровня это удаляет событие из
контекст только с DETACH_EXIT. Это может привести к противоречивому состоянию группы, если удаленное событие является группой.
лидер, и группа содержит братьев и сестер без Remove_on_exec.
Если группа
был активен, выжившие братья и сестры могут оставаться активными и привязанными к
удален список братьев и сестер лидера, но они больше не представлены действительным
лидер группы в активных списках контекста PMU. Более позднее закрытие удаленного лидера использует DETACH_GROUP и может способствовать
все еще активные братья и сестры из этого устаревшего группового состояния. Следующий график может
затем снова добавьте уже связанную запись active_list, повредив PMU
контекстный активный список.
При включенном DEBUG_LIST это распознается как двойное добавление list_add в
merge_sched_in(). Исправьте это, отключив групповые связи, когда remove_on_exec удаляет
событие. Это сохраняет существующее поведение выхода из задачи и отзыва, в то время как
обеспечение того, чтобы выжившие братья и сестры были разгруппированы до того, как удаленное событие исчезнет
контекст.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: perf/core: Detach event groups during remove_on_exec perf_event_remove_on_exec() removes events by calling perf_event_exit_event(). For top-level events, this removes the event from the context with DETACH_EXIT only. This can leave inconsistent group state when a removed event is a group leader and the group contains siblings without remove_on_exec. If the group was active, the surviving siblings can remain active and attached to the removed leader's sibling list, but are no longer represented by a valid group leader on the PMU context active lists. A later close of the removed leader uses DETACH_GROUP and can promote the still-active siblings from this stale group state. The next schedule-in can then add an already-linked active_list entry again, corrupting the PMU context active list. With DEBUG_LIST enabled, this is caught as a list_add double-add in merge_sched_in(). Fix this by detaching group relationships when remove_on_exec removes an event. This preserves the existing task-exit and revoke behavior, while ensuring surviving siblings are ungrouped before the removed event leaves the context.