CVE-2026-89580
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: bpf: __bpf_get_stack funksiyasında preemption-ın deaktiv edilməsi get_perf_callchain() hər bir CPU üçün perf_callchain_entry buferi qaytarır və geri dönməzdən əvvəl put_callchain_entry() vasitəsilə onun rekursiya slotunu azad edir, buna görə də __bpf_get_stack() onu istifadə etdiyi müddətdə giriş rezervdə saxlanılmır. Preemptible BPF proqramı (məsələn, PREEMPT nüvəsində migrate_disable() altında işləyən, lakin preempt_disable() altında olmayan yuxuya getməyən raw tracepoint proqramı), girişi əldə etmək və kopyalamaq arasında planlaşdırıla bilər. Daha sonra eyni CPU-da planlaşdırılan digər tapşırıq həmin per-CPU buferini yenidən istifadə edir və trace->nr dəyərini daha böyük bir dəyərlə əvəz edir. copy_len daha sonra şişirdilmiş trace->nr əsasında hesablanır və çağıran tərəfin buferini aşa bilər ki, bu da memcpy()-də və build_id yolunda sərhədlərdən kənar yazmaya (out-of-bounds write) səbəb olur. Burada yalnız rcu_read_lock()-un götürülməsi bunu önləmir. O, yalnız may_fault yolunda götürülür və CONFIG_PREEMPT_RCU altında preemption-ı deaktiv etmir; o, sadəcə perf-in callchain bufer massivini aktiv saxlayır (call_rcu() vasitəsilə azad edilir) və başqa bir tapşırığın girişi yenidən istifadə etməsinin qarşısını almaq üçün heç nə etmir. Callchain girişinin əldə edilməsi və onun çağıran tərəfin buferinə kopyalanması zamanı preemption-ı deaktiv edin, beləliklə, giriş bizim altımızda yenidən istifadə edilə bilməz və trace->nr dəyəri max_depth ilə məhdudlaşar. Build ID həlli fault törədə bilər və buna görə də preemption yenidən aktiv edilənə qədər təxirə salınır; həmin vaxta qədər təlimat göstəriciləri artıq buf-a kopyalanmış olur, beləliklə, o, yalnız həmin şəxsi nüsxə üzərində əməliyyat aparır. Qeyd edin ki, preempt_disable() həmçinin rcu_read_lock()-un təmin etdiyi bufer ömrü zəmanətini də özündə birləşdirir, çünki preempt-disabled bölməsi callchain buferlərinin call_rcu() bərpası üçün RCU oxuma tərəfli kritik bölmədir. [ changed Fixes: commit ]
Necə düzəltmək olar
- Linux Linux68eebc89c5ab5a8f9281773f35e49c83940450a0, 719e69421de28829c72bf8a2722ab48a1c5a59ad, 8c5ba022f2085ea42d011497a6e92e527d123b9b, dbfecc8a6631c0d3626c14ba1f1a485a4498445a, 9a23747909fcae707990c8466c381a0e7acfaa4e, b1a47b2708d4e95dbd23aee2ec83752190897b3f və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| Linux Linux | c195651e565ae7f41a68acb7d4aa7390ad215de1 ≤ v < 68eebc89c5ab5a8f9281773f35e49c83940450a0, c195651e565ae7f41a68acb7d4aa7390ad215de1 ≤ v < 719e69421de28829c72bf8a2722ab48a1c5a59ad, c195651e565ae7f41a68acb7d4aa7390ad215de1 ≤ v < 8c5ba022f2085ea42d011497a6e92e527d123b9b, c195651e565ae7f41a68acb7d4aa7390ad215de1 ≤ v < dbfecc8a6631c0d3626c14ba1f1a485a4498445a, c195651e565ae7f41a68acb7d4aa7390ad215de1 ≤ v < 9a23747909fcae707990c8466c381a0e7acfaa4e, c195651e565ae7f41a68acb7d4aa7390ad215de1 ≤ v < b1a47b2708d4e95dbd23aee2ec83752190897b3f, 4.18 | 68eebc89c5ab5a8f9281773f35e49c83940450a0, 719e69421de28829c72bf8a2722ab48a1c5a59ad, 8c5ba022f2085ea42d011497a6e92e527d123b9b, dbfecc8a6631c0d3626c14ba1f1a485a4498445a, 9a23747909fcae707990c8466c381a0e7acfaa4e, b1a47b2708d4e95dbd23aee2ec83752190897b3f |
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.
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.