CVE-2026-98076 in Linuxinformation

Résumé

par VulDB • 25/09/2026

Dans le noyau Linux, la vulnérabilité suivante a été corrigée :

tracing/probes : Correction d'un use-after-free sur le nom/le type des champs des événements comportant plusieurs sondes (probes)

Les champs d’un événement dynamique basé sur une sonde (événements kprobe, uprobe, eprobe et fprobe) sont créés dans `traceprobe_define_arg_fields()` en transmettant les chaînes de caractères du nom/du type de l’argument (`probe_arg`) à `trace_define_field()`, qui ne fait que stocker les pointeurs sans effectuer de copie. Ces chaînes appartiennent au trace_probe et sont libérées lorsque cette sonde est supprimée.

Un événement peut avoir plusieurs sondes associées. La liste des champs n’est définie qu’une seule fois, par la première sonde qui enregistre l’événement, mais elle reste valide tant qu’il existe une sonde sœur survivante. Supprimer uniquement cette première sonde via le symbole :

# primaire A : les champs sont définis à partir des arguments de A echo 'p:kprobes/ev vfs_read a1=$arg1' > kprobe_events # append B : partage l’appel d’événement de A echo 'p:kprobes/ev vfs_write a1=$arg1' >> kprobe_events # suppression uniquement de A (correspondance par symbole), B survit echo '-:kprobes/ev vfs_read' >> kprobe_events

libère les arguments de A (`trace_probe_cleanup()` -> `traceprobe_free_probe_arg()`), mais `trace_probe_unlink()` maintient le trace_probe_event car la liste des sondes n’est pas vide. L’appel d’événement reste enregistré via B, tandis que ses champs font désormais référence à une mémoire déjà libérée. Toute recherche de champ lit alors cette mémoire corrompue, par exemple :

echo 'a1 == 1' > events/kprobes/ev/filter

BUG: KASAN: slab-use-after-free in strcmp+0xa7/0xb0 Call Trace: strcmp trace_find_event_field parse_pred process_preds create_filter apply_event_filter event_filter_write

`field->name` fait référence à `parg->name` (alloué via kstrdup, libéré avec la sonde) et, pour les arguments de type tableau, `field->type` fait référence à `parg->fmt` (alloué via kmalloc, libéré avec la sonde) ; le type scalaire pointe sinon vers l’rodata statique `fmttype`, ce qui est sûr.

La fonction `traceprobe_define_arg_fields()` doit désormais dupliquer les chaînes de caractères du nom et du type, et ancrer ces copies sur le trace_probe_event, qui intègre l’appel d’événement et survit à chaque sonde individuelle ; c’est `trace_probe_event_free()` qui s’en charge pour libérer la mémoire.

Le reproducteur ci-dessus déclenche de manière fiable ; la recherche de champ et la suppression s’exécutent toutes deux sous le verrou `event_mutex`, il s’agit donc d’une référence pendante (dangling reference) après suppression plutôt que d’un race condition.

Ce problème a été détecté par l’autokbug, un fuzzer dynamique du noyau, au sein du Tencent Yunding Lab.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Responsable

Linux

Réserver

25/09/2026

Divulgation

25/09/2026

Modérer

accepté

Entrée

VDB-410282

CPE

prêt

EPSS

0.00000

KEV

non

Activités

très faible

Sources

Do you want to use VulDB in your project?

Use the official API to access entries easily!