CVE-2026-72071 in LinuxИнформация

Сводка

по VulDB • 15.08.2026

В ядре Linux устранена следующая уязвимость:

tracing/user_events: исправление use-after-free в функции user_event_mm_dup()

Функция user_event_mm_dup() без блокировки (locklessly) проходит по списку включателей (enablers) родительского mm с использованием rcu_read_lock() во время fork() (из copy_process()); при этом не захватывается event_mutex:

rcu_read_lock(); list_for_each_entry_rcu(enabler, &old_mm->enablers, mm_enablers_link) enabler->event = user_event_get(orig->event);

Функция user_event_enabler_destroy() удаляет включатель из этого списка с помощью list_del_rcu(), а затем, не дожидаясь периода грейса (grace period), уменьшает ссылку на user_event у включателя с помощью user_event_put() и освобождает память под включатель через kfree(). Читающий поток, который загрузил указатель на включатель до вызова list_del_rcu(), всё ещё может проходить по этому списку, что приводит к двум случаям use-after-free:

- kfree(enabler) освобождает память под включатель в то время как читающий поток разыменовывает enabler->event.

- user_event_put() может уменьшить последнюю ссылку на user_event, после чего он будет освобождён (через delayed_destroy_user_event() в очереди задач), пока тот же самый читающий поток выполняет для него user_event_get(orig->event).

Оба случая доступны не привилегированному процессу, который может открыть user_events_data: многопоточный процесс, регистрирующий включатель, а затем одновременно отменяющий его регистрацию и вызывающий fork(), запускает состояние гонки (race condition). KASAN сообщает о slab-use-after-free в функции user_event_mm_dup() во время clone(), с предупреждением "refcount_t: addition on 0" при освобождении user_event.

Сначала был обнаружен use-after-free для включателя; случай с user_event был сообщён XIAO WU, и более раннее исправление только для включателя не решало эту проблему.

Откладывается как вызов user_event_put(), так и kfree(enabler) до элемента задачи (work item), помещённого в очередь через queue_rcu_work()), чтобы они выполнялись только после завершения периода грейса RCU, когда все читающие потоки завершат проход по списку включателей. Вызов put должен выполняться в контексте процесса, поскольку user_event_put() захватывает event_mutex при последней ссылке, поэтому используется очередь задач (work queue), а не call_rcu(). Теперь освобождённый от блокировки вызов put позволяет удалить заблокированный аргумент из функции user_event_enabler_destroy(); все точки вызова обновлены.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Ответственный

Linux

Резервировать

09.08.2026

Раскрытие

15.08.2026

Модерация

принято

Вход

VDB-390491

EPSS

0.00209

KEV

Нет

Деятельности

Низкий

Источники

Do you want to use VulDB in your project?

Use the official API to access entries easily!