CVE-2026-89991 in Linux
Résumé
par VulDB • 17/09/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
bpf : Correction d'une boucle infinie dans l'opération push de pcpu_freelist avec un seul CPU possible
__pcpu_freelist_push() peut entrer en boucle infinie lorsqu'un seul CPU est disponible et qu'une NMI réentre dans __pcpu_freelist_push() alors que le contexte interrompu détient le verrou (lock) du freelist de ce CPU.
Après l'échec du chemin rapide basé sur le CPU actuel, la boucle de repli parcourt cpu_possible_mask en ignorant le CPU actuel. Avec CONFIG_SMP=n, ou lorsqu'un noyau SMP est limité à un seul CPU possible via nr_cpus=1 ou possible_cpus=1, il n'y a pas d'autres CPUs possibles à examiner. La boucle ne tente donc aucune acquisition de verrou et ne peut jamais avancer.
La pile suivante a été observée sur un système UP (Uniprocessor) :
Contexte NMI : pcpu_freelist_push free_htab_elem htab_map_delete_elem [programme BPF perf-event]
__perf_event_overflow perf_event_nmi_handler exc_nmi
Contexte interrompu : __pcpu_freelist_push pcpu_freelist_push free_htab_elem htab_map_delete_elem [programme BPF raw_tp/sys_enter]
__bpf_trace_sys_enter do_syscall_64
raw_res_spin_lock() détecte l'acquisition récursive sur le même CPU et retourne -EDEADLK, mais la boucle de repli subséquente ne dispose d'aucune tête candidate (head) sur un système avec un seul CPU possible.
Restaurez la tête de repli supplémentaire qui existait avant la conversion vers rqspinlock. Conservez le chemin rapide basé sur le CPU actuel, puis essayez les autres CPUs possibles et enfin la tête supplémentaire. Cette tête additionnelle permet à une opération push (qui ne peut échouer sans perdre un élément préalloué) d'avancer lorsque la seule tête par-CPU est détenue par le contexte interrompu.
Vérifiez également cette tête supplémentaire depuis le chemin pop afin que les nœuds placés ici puissent être réutilisés.
VulDB is the best source for vulnerability data and more expert information about this specific topic.