CVE-2026-89991

CVE-2026-89991

published September 16, 2026

CVSS
—
EPSS
0%
Percentile
10.2
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

bpf: Fix infinite loop in pcpu_freelist push with one possible CPU

__pcpu_freelist_push() can loop forever when only one CPU is possible

and an NMI re-enters pcpu_freelist_push() while the interrupted context

holds that CPU's freelist lock.

After the current-CPU fast path fails, the fallback loop walks

cpu_possible_mask while skipping the current CPU. With CONFIG_SMP=n, or

when an SMP kernel is limited to one possible CPU with nr_cpus=1 or

possible_cpus=1, there are no other possible CPUs to examine. The loop

therefore makes no lock acquisition attempt and can never make progress.

The following stack was observed on a UP system:

NMI context:

pcpu_freelist_push

free_htab_elem

htab_map_delete_elem

[perf-event BPF program]

__perf_event_overflow

perf_event_nmi_handler

exc_nmi

Interrupted context:

__pcpu_freelist_push

pcpu_freelist_push

free_htab_elem

htab_map_delete_elem

[raw_tp/sys_enter BPF program]

__bpf_trace_sys_enter

do_syscall_64

raw_res_spin_lock() detects the same-CPU recursive acquisition and

returns -EDEADLK, but the subsequent fallback loop has no candidate head

on a system with one possible CPU.

Restore the extra fallback head that existed before the rqspinlock

conversion. Keep the current-CPU fast path, then try the other possible

CPUs and finally the extra head. The additional head lets a push, which

cannot fail without losing a preallocated element, make progress when the

only per-CPU head is held by the interrupted context.

Also check the extra head from the pop path so that nodes placed there

can be reused.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00206 · 10.2th percentile
Published
2026-09-16T15:17Z
References (3)
EPSS history
Timeline
  • 18 SEP 04:02Z
    EPSS moved — → 0%
    epss
  • 16 SEP 10:33Z
    bpf: Fix infinite loop in pcpu_freelist push with one possible CPU
    cvelistv5