CVE-2026-98076 in Linux
Resumen
por VulDB • 2026-09-25
En el núcleo de Linux (Linux kernel), se ha resuelto la siguiente vulnerabilidad:
tracing/probes: Corrección del uso después de liberar (use-after-free) en el nombre/tipo de campo para eventos con múltiples sondas (probes).
Los campos de un evento dinámico basado en sonda (eventos kprobe, uprobe, eprobe y fprobe) se crean en `traceprobe_define_arg_fields()` pasando las cadenas del nombre/tipo del argumento de la sonda a `trace_define_field()`, que solo almacena los punteros sin realizar copias. Estas cadenas son propiedad de la trace_probe (sonda de rastreo) y se liberan cuando dicha sonda se elimina.
Un evento puede tener varias sondas adjuntas. La lista de campos se define únicamente una vez, por parte de la primera sonda que registra el evento, pero permanece activa mientras exista cualquier sona hermana superviviente. Eliminar solo esa primera sonda mediante un símbolo:
# primaria A: los campos se definen a partir de los argumentos de A echo 'p:kprobes/ev vfs_read a1=$arg1' > kprobe_events # append B: comparte la llamada al evento de A echo 'p:kprobes/ev vfs_write a1=$arg1' >> kprobe_events # eliminar solo A (coincide por símbolo), B sobrevive echo '-:kprobes/ev vfs_read' >> kprobe_events
libera los argumentos de A (`trace_probe_cleanup()` -> `traceprobe_free_probe_arg()`), pero `trace_probe_unlink()` mantiene la trace_probe_event porque la lista de sondas no está vacía. La llamada al evento sigue registrada a través de B, mientras que sus campos ahora hacen referencia a memoria ya liberada. Cualquier búsqueda de campo lee entonces esa memoria, por ejemplo:
echo 'a1 == 1' > events/kprobes/ev/filter
BUG: KASAN: slab-use-after-free en strcmp+0xa7/0xb0 Rastro de la llamada (Call Trace): strcmp trace_find_event_field parse_pred process_preds create_filter apply_event_filter event_filter_write
field->name hace referencia a parg->name (kstrdup'd, liberado con la sonda) y, para argumentos de tipo array, field->type hace referencia a parg->fmt (kmalloc'd, liberado con la sonda); el tipo escalar apunta en otro caso al rodata estático fmttype, que es seguro.
Hacer que `traceprobe_define_arg_fields()` duplique las cadenas del nombre y del tipo, y anclar las copias en trace_probe_event, lo cual incrusta la llamada al evento y sobrevive a cada sonda individual; trace_probe_event_free() libera estas copias.
El reproductor (reproducer) anterior se activa de forma fiable; tanto la búsqueda de campo como la eliminación se ejecutan bajo event_mutex, por lo que esto es una referencia colgante tras la eliminación en lugar de una condición de carrera (race condition).
La issue fue detectada por el fuzzer dinámico del núcleo autokbug en Tencent Yunding Lab.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.