CVE-2026-89991 in Linux
Tóm tắt
Bởi VulDB • 17/09/2026
Trong kernel Linux, các lỗ hổng sau đây đã được khắc phục:
bpf: Sửa lỗi vòng lặp vô hạn trong hàm pcpu_freelist_push khi chỉ có một CPU khả dụng
__pcpu_freelist_push() có thể tạo ra vòng lặp vô hạn khi chỉ có một CPU khả dụng và một NMI (Non-Maskable Interrupt) tái nhập vào pcpu_freelist_push() trong khi ngữ cảnh bị ngắt đang giữ khóa freelist của CPU đó.
Sau khi đường dẫn nhanh dựa trên current-CPU thất bại, vòng lặp dự phòng sẽ duyệt qua cpu_possible_mask trong khi bỏ qua current-CPU. Với cấu hình CONFIG_SMP=n, hoặc khi kernel SMP bị giới hạn chỉ có một CPU khả dụng nhờ các tham số nr_cpus=1 hoặc possible_cpus=1, sẽ không còn CPU nào khác để kiểm tra. Do đó, vòng lặp này không thực hiện bất kỳ nỗ lực nào để lấy khóa và không thể tiến triển được.
Ngăn xếp (stack) sau đây đã được quan sát trên một hệ thống UP (Uniprocessor):
Ngữ cảnh NMI: pcpu_freelist_push free_htab_elem htab_map_delete_elem [chương trình BPF perf-event]
__perf_event_overflow perf_event_nmi_handler exc_nmi
Ngữ cảnh bị ngắt: __pcpu_freelist_push pcpu_freelist_push free_htab_elem htab_map_delete_elem [chương trình BPF raw_tp/sys_enter]
__bpf_trace_sys_enter do_syscall_64
raw_res_spin_lock() phát hiện việc lấy khóa đệ quy trên cùng một CPU và trả về -EDEADLK, nhưng vòng lặp dự phòng tiếp theo không có ứng viên head nào trên hệ thống chỉ có một CPU khả dụng.
Khôi phục lại head dự phòng bổ sung đã tồn tại trước khi chuyển đổi sang rqspinlock. Giữ nguyên đường dẫn nhanh current-CPU, sau đó thử các CPU khả dụng khác và cuối cùng là head bổ sung. Head bổ sung này cho phép thao tác push (vốn không thể thất bại nếu không làm mất phần tử đã phân bổ trước) tiến triển được ngay cả khi head per-CPU duy nhất đang bị ngữ cảnh bị ngắt giữ.
Ngoài ra, cũng cần kiểm tra head bổ sung từ đường dẫn pop để các node đặt tại đó có thể được tái sử dụng.
If you want to get best quality of vulnerability data, you may have to visit VulDB.