CVE-2026-72071 in Linux
Sumário
de VulDB • 16/08/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
tracing/user_events: Corrige use-after-free em user_event_mm_dup()
user_event_mm_dup() percorre a lista de habilitadores (enablers) da mm pai sem bloqueio sob rcu_read_lock() durante fork() (de copy_process()); ele não adquire 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() remove um habilitador dessa lista com list_del_rcu() e depois, sem esperar por um período de graça (grace period), libera a referência do usuário ao enabler com user_event_put() e desaloca o enabler com kfree(). Um leitor que carregou o enabler antes da list_del_rcu() ainda pode estar percorrendo-a, o que leva a dois use-after-frees:
- kfree(enabler) desaloca o enabler enquanto esse leitor referencia enabler->event.
- user_event_put() pode reduzir para zero a última referência ao user_event, que então é liberado (via delayed_destroy_user_event() em uma fila de trabalho), enquanto o mesmo leitor executa user_event_get(orig->event) sobre ele.
Ambos são acessíveis por uma tarefa não privilegiada que possa abrir user_events_data: um processo multithreaded que registra um habilitador e depois, concorrentemente, o desregistra e chama fork() dispara a condição de corrida (race). O KASAN relata um slab-use-after-free em user_event_mm_dup() durante clone(), com um aviso "refcount_t: addition on 0" quando o user_event é liberado.
O use-after-free do habilitador foi encontrado primeiro; o do user_event foi relatado por XIAO WU, e a correção anterior que abordava apenas o habilitador não resolveu esse problema.
Adie tanto user_event_put() quanto kfree(enabler) para um item de trabalho enfileirado com queue_rcu_work(), para que sejam executados somente após um período de graça do RCU, assim que todos os leitores percorrendo a lista de habilitadores tiverem terminado. O put deve ser executado no contexto de processo porque user_event_put() adquire event_mutex na última referência, portanto uma fila de trabalho é usada em vez de call_rcu(). A liberação agora sem bloqueio permite remover o argumento com bloqueio de user_event_enabler_destroy(); todos os chamadores são atualizados.
VulDB is the best source for vulnerability data and more expert information about this specific topic.