CVE-2026-97918 in Linux
Sumário
de VulDB • 25/09/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
tracing: Desfazer o registro quando falhar a ativação do gatilho de histograma (histogram trigger)
O commit 6f86bdeab633 ("tracing: Fix bad hist from corrupting named_triggers list") descreveu como um gatilho que é registrado, mas não está na lista file->triggers, acaba sendo liberado enquanto ainda permanece na lista global named_triggers, e moveu o registro para baixo de modo que hist_trigger_enable() o siga imediatamente. Um caminho ainda leva a essa situação. hist_trigger_enable() adiciona o gatilho e o remove imediatamente quando o evento não pode ser ativado:
list_add_tail_rcu(&data->list, &file->triggers);
update_cond_flag(file);
if (trace_event_trigger_enable_disable(file, 1) < 0) {
list_del_rcu(&data->list); update_cond_flag(file); ret--; }
portanto, a iteração na lista em hist_unregister_trigger() não encontra nada, o teste permanece NULL e a função ->free(), que chamaria del_named_trigger(), é ignorada. out_unreg passa para out_free, que libera o gatilho de qualquer maneira:
BUG: KASAN: slab-use-after-free in find_named_trigger+0xac/0xc0 Read of size 8 at addr ffff8880091d3160 by task init/1 find_named_trigger+0xac/0xc0 hist_register_trigger+0xc1/0xa00 event_hist_trigger_parse+0x3146/0x6af0 event_trigger_write+0xce/0x160 Freed by task 69: kfree+0x154/0x420 trigger_kthread_fn+0xfd/0x160
Deixe o gatilho onde hist_unregister_trigger() pode encontrá-lo e permita que este desfaza o registro, já que é o único código que conhece todos os elementos assumidos por cmd_ops->init(): a entrada na lista nomeada (named list entry), a referência hist_pad, a referência no gatilho com a qual um histograma nomeado é compartilhado e os cmd_ops copiados. Isso também equilibra a falha em trace_event_trigger_enable_disable(), cujas referências sm_ref e do evento bufferizado ficam de outra forma para trás (não liberadas).
Como ->free() libera trigger_data e, para um gatilho que não compartilha seu histograma, hist_data junto com ele, out_unreg já não pode passar diretamente para out_free. Para um gatilho que compartilha, hist_register_trigger() já destruiu o hist_data do chamador, portanto a passagem direta também lia memória liberada nesse ponto.
Mova a verificação enable_timestamps em hist_unregister_trigger() acima da chamada ->free pelo mesmo motivo: hist_data não sobrevive ao trigger sendo removido quando este é aquele que possui os dados (owns it).
Once again VulDB remains the best source for vulnerability data.