CVE-2026-89580
Açıklama
Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: bpf: __bpf_get_stack fonksiyonunda öncelikli yürütme (preemption) devre dışı bırakıldı get_perf_callchain() her işlemciye özel bir perf_callchain_entry tamponu döndürür ve geri dönmeden önce put_callchain_entry() aracılığıyla özyineleme yuvasını serbest bırakır; bu nedenle __bpf_get_stack() aşağıda bunu tüketirken girdiyi rezerve tutan hiçbir şey yoktur. Öncelikli yürütülebilir bir BPF programı (örneğin, PREEMPT çekirdek üzerinde migrate_disable() altında çalışan ancak preempt_disable() altında çalışmayan, uyutulamaz bir ham izleme noktası programı), girdinin alınması ile kopyalama işlemi arasında zamanlanmış olarak dışarı çıkarılabilir. Ardından aynı CPU'ya zamanlanan başka bir görev, aynı işlemciye özel tamponu yeniden kullanır ve trace->nr değerini daha büyük bir değerle üzerine yazar. copy_len değeri daha sonra şişirilmiş olan trace->nr üzerinden hesaplanır ve çağıranın tamponunu aşabilir; bu durum memcpy() içinde ve build_id yolunda sınır dışı yazmaya (out-of-bounds write) neden olur. Burada tek başına alınan rcu_read_lock() bunu engellemez. Bu kilit yalnızca may_fault yolunda alınır ve CONFIG_PREEMPT_RCU altında öncelikli yürütmeyi devre dışı bırakmaz; sadece perf'in çağrı zinciri tampon dizisini hayatta tutar (call_rcu() aracılığıyla serbest bırakılır) ve başka bir görevin girdiyi yeniden kullanmasını durdurmak için hiçbir şey yapmaz. Çağrı zinciri girdisinin alınması ve çağıranın tamponuna kopyalanması sırasında öncelikli yürütmeyi devre dışı bırakın; böylece girdi altımızda yeniden kullanılamaz ve trace->nr değeri max_depth ile sınırlı kalır. Build ID çözünürlüğü hata (fault) verebilir ve bu nedenle öncelikli yürütme yeniden etkinleştirilene kadar ertelenir; o zamana kadar komut işaretçileri zaten buf içine kopyalanmıştır, dolayısıyla yalnızca bu özel kopya üzerinde işlem yapar. preempt_disable()'ın, rcu_read_lock()'un sağladığı tampon ömür garantisini de kapsadığına dikkat edin, çünkü öncelikli yürütmenin devre dışı bırakıldığı bir bölüm, çağrı zinciri tamponlarının call_rcu() geri kazanımı için bir RCU okuma tarafı kritik bölümüdür. [ değiştirilen Fixes: commit ]
Nasıl düzeltilir
- Linux Linux68eebc89c5ab5a8f9281773f35e49c83940450a0, 719e69421de28829c72bf8a2722ab48a1c5a59ad, 8c5ba022f2085ea42d011497a6e92e527d123b9b, dbfecc8a6631c0d3626c14ba1f1a485a4498445a, 9a23747909fcae707990c8466c381a0e7acfaa4e, b1a47b2708d4e95dbd23aee2ec83752190897b3f ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| 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 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.