CVE-2026-98644
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: bpf: __htab_map_lookup_and_delete_batch() fonksiyonundaki soft lockup durumundan kaçının __htab_map_lookup_and_delete_batch() fonksiyonunda herhangi bir yeniden zamanlama noktası bulunmamaktadır. Batch sayısı, ziyaret edilen bucket sayısını değil, dışarı aktarılan giriş sayısını sınırlar; bu nedenle tek bir BPF_MAP_LOOKUP_BATCH çağrısı haritayı baştan sona tarayabilir. Boş bucket hızlı yolu durumu daha da kötüdür: ardışık boş bucket dizileri için tek bir rcu_read_lock() / bpf_disable_instrumentation() bölümü içinde kalır. Bu durum küçük haritalarda sorun yaratmasa da ölçeklendiğinde çökmektedir. CONFIG_PREEMPT_NONE çekirdeği çalıştıran 144 CPU'lu bir arm64 ana makinesinde, 16.777.216 bucket içeren bir LRU hash map'ine yönelik periyodik BPF_MAP_LOOKUP_BATCH çağrıları, bir CPU'yu batch işlemi sırasında 77 saniyeden fazla meşgul etmiş ve soft lockup watchdog mekanizmasını tetiklemiştir. 75134f16e7dd ("bpf: Add schedule points in batch ops") commit'i aynı sorunu genel batch işlemlerinde düzeltmiş ancak her htab tabanlı hash map varyantının lookup[_and_delete] batch işlemleri için kullandığı bu htab-yerel yolunda düzeltmemiştir. Bu düzeltme burada tamamlanmıştır. Ardışık 64 boş bucket'tan sonra kritik bölümden çıkılır, cond_resched_tasks_rcu_qs() çağrılır ve kaydedilen bucket imlecinden devam edilir. Bu noktada hiçbir kilit tutulmamaktadır ve imleçten devam etmek zaten fonksiyonun boş olmayan bucket'lar için sergilediği davranıştır. Aynı çağrı, tüm kilitlerin bırakıldığı copy_to_user() sonrası bucket başına döngüsüne eklenmiştir. Burada cond_resched_rcu() yeterli değildir: bpf_prog_active yükseltilmişken uyumak, o CPU üzerindeki izleme programlarının çağrılarının sessizce atlanmasına neden olur. Sıradan cond_resched() de yeterli değildir. 7dadeaa6e851 ("sched: Further restrict the preemption modes") commit'inden beri arm64 ve x86'nın sunduğu tek modeller olan PREEMPT ve PREEMPT_LAZY altında etkisizdir (no-op). Ayrıca hiçbir modelde asla bir Tasks RCU sakin durumu (quiescent state) oluşturmaz: yeniden zamanlama bir ön alma (preemption) olarak sayılır. Tarama yapan görev, sistem çağrısı dönene kadar bir istisna olarak kalmaya devam eder ve ftrace ile BPF trampoline kaldırma işlemleri dahil olmak üzere her synchronize_rcu_tasks() çağırıcısını durdurur [1]. Bunun için standart araç cond_resched_tasks_rcu_qs() fonksiyonudur [2]. Her yield işleminde sakin durumu raporlar ve PREEMPT_NONE ile PREEMPT_VOLUNTARY çekirdeklerinde cond_resched() gibi yeniden zamanlama yapar.
Nasıl düzeltilir
Kaynaklarda bu zafiyet için düzeltilmiş sürüm ya da yama bağlantısı yok.
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| microsoft azl3_kernel_6.6.157.1-1 | Aralık belirtilmemiş | — |
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.