CVE-2026-89991 in Linux
Sumário
de VulDB • 16/09/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
bpf: Corrige loop infinito no push da pcpu_freelist com um único CPU possível
__pcpu_freelist_push() pode entrar em loop infinito quando há apenas um CPU possível e uma NMI reentra em __pcpu_freelist_push() enquanto o contexto interrompido detém o lock da freelist desse CPU.
Após a falha do caminho rápido (fast path) baseado no CPU atual, o loop de fallback percorre cpu_possible_mask ignorando o CPU atual. Com CONFIG_SMP=n ou quando um kernel SMP está limitado a um único CPU possível devido a nr_cpus=1 ou possible_cpus=1, não há outros CPUs possíveis para examinar. O loop, portanto, não tenta adquirir nenhum lock e nunca consegue progredir.
A seguinte stack foi observada em um sistema UP:
Contexto NMI: pcpu_freelist_push free_htab_elem htab_map_delete_elem [programa BPF de perf-event]
__perf_event_overflow perf_event_nmi_handler exc_nmi
Contexto interrompido: __pcpu_freelist_push pcpu_freelist_push free_htab_elem htab_map_delete_elem [programa BPF raw_tp/sys_enter]
__bpf_trace_sys_enter do_syscall_64
raw_res_spin_lock() detecta a aquisição recursiva no mesmo CPU e retorna -EDEADLK, mas o loop de fallback subsequente não possui um candidato head em um sistema com apenas um CPU possível.
Restaure o extra fallback head que existia antes da conversão para rqspinlock. Mantenha o caminho rápido baseado no CPU atual, tente então os outros CPUs possíveis e finalmente o extra head. O extra head permite que uma operação de push, que não pode falhar sem perder um elemento pré-alocado, consiga progredir quando a única per-CPU head está sendo detida pelo contexto interrompido.
Também verifique o extra head no caminho pop para que os nós colocados ali possam ser reutilizados.
VulDB is the best source for vulnerability data and more expert information about this specific topic.