CVE-2026-64352

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: bpf: Yuxu rejimində işləyən BPF proqramlarından LPM map-ə girişə icazə ver trie_lookup_elem() öz rcu_dereference_check() gəzintilərini yalnız rcu_read_lock_bh_held() ilə işarələyir. rcu_dereference_check(p, c) "c || rcu_read_lock_held()" kimi həll olunduğundan, bu XDP/NAPI və klassik RCU oxuyucuları üçün keçir, lakin __bpf_prog_enter_sleepable() vasitəsilə daxil olan və yalnız rcu_read_lock_trace() saxlayan yuxu rejimində işləyən BPF proqramları üçün uğursuz olur. trie_update_elem() və trie_delete_elem() eyni problemi fərqli formada yaşayır: onlar trie-ni şərtsiz olaraq rcu_read_lock_held() tələb edən adi rcu_dereference() ilə gəzirlər. Hər ikisinə yuxu rejimində işləyən BPF proqramlarından bpf_map_update_elem / bpf_map_delete_elem köməkçiləri vasitəsilə və klassik rcu_read_lock() altında sistem çağırışı yolundan çatmaq mümkündür. Yazıcı yollarında trie əslində trie->lock (gəzinti boyunca götürülən rqspinlock) ilə qorunur; biz orada qovşaqları canlı saxlamaq üçün heç vaxt RCU oxu tərəfi kilidinə arxalanmamışıq. Buna görə də LPM trie-yə toxunan yuxu rejimində işləyən LSM hook-u debug kernel-lərində lockdep-i işə salır: ============================= WARNING: suspicious RCU usage 7.1.0-... Tainted: G E ----------------------------- kernel/bpf/lpm_trie.c:249 suspicious rcu_dereference_check() usage! 1 lock held by net_tests/540: #0: (rcu_tasks_trace_srcu_struct){....}-{0:0}, at: __bpf_prog_enter_sleepable+0x26/0x280 Call Trace: dump_stack_lvl lockdep_rcu_suspicious trie_lookup_elem bpf_prog_..._enforce_security_socket_connect bpf_trampoline_... security_socket_connect __sys_connect do_syscall_64 Bu yalnız lockdep ilə bağlıdır -- UAF yoxdur, çünki Tasks Trace RCU trie-nin geri qaytarılma yoluna qarşı serializasiya edir -- lakin LPM trie-yə toxunan yuxu rejimində işləyən BPF LSM işləyən hər debug kernel-də hər fərqli çağırış nöqtəsi üçün bir dəfə konsolu mesajla doldurur ki, bu da getdikcə daha çox yayılır. Axtarış yolu üçün rcu_dereference_check() annotasiyasını rcu_read_lock_bh_held()-dən hər üç konteksti (klassik, BH, Tasks Trace) qəbul edən bpf_rcu_lock_held()-ə dəyişdirin. Digər map növləri artıq bu konvensiyaya əməl edir. trie_update_elem() və trie_delete_elem() üçün gəzintiləri rcu_dereference_protected(*p, 1) kimi işarələyin -- eyni fayldakı trie_free() ilə uyğun olaraq -- çünki gəzinti boyunca trie->lock saxlanılır. rqspinlock-un lockdep_map-ı yoxdur, buna görə predikat lockdep_is_held(&trie->lock) əvəzinə '1'-ə çevrilir; qoruma realdır, lakin maşınla yoxlanıla bilməz. trie_get_next_key() də adi rcu_dereference() istifadə edir, lakin ona yalnız dispetçerdən əvvəl klassik rcu_read_lock() saxlayan BPF sistem çağırışından çatmaq mümkündür, buna görə də toxunulmaz qalır.

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc25 iyl 2026
İlk görülmə25 iyl 2026

Necə düzəltmək olar

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel5.14 ≤ v < 5.15.212, 5.16 ≤ v < 6.1.178, 6.2 ≤ v < 6.6.145, 6.7 ≤ v < 6.12.97, 6.13 ≤ v < 6.18.40, 6.19 ≤ v < 7.1.45.15.212, 6.1.178, 6.6.145, 6.12.97, 6.18.40, 7.1.4

Versiyanızı yoxlayın

Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.

Intelligence 360 paketində

Attack Surface Management

Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.