CVE-2026-23294

Yüksek

Açıklama

Linux kernel'da aşağıdaki güvenlik açığı giderilmiştir: bpf: PREEMPT_RT üzerinde devmap'teki yarış durumu düzeltildi PREEMPT_RT çekirdeklerinde, her işlemciye özel (per-CPU) xdp_dev_bulk_queue (bq), aynı işlemci üzerindeki birden fazla kesilebilir görev tarafından eşzamanlı olarak erişilebilir olabilir. Orijinal kod, önlemeyi (preemption) engellemek için local_bh_disable() fonksiyonuna güvenerek, bq_enqueue() ve __dev_flush() fonksiyonlarının aynı işlemci üzerinde birbirlerine göre atomik olarak çalıştığını varsayar. Ancak PREEMPT_RT üzerinde local_bh_disable(), yalnızca migrate_disable() fonksiyonunu çağırır (PREEMPT_RT_NEEDS_BH_LOCK ayarlanmadığında) ve önlemeyi devre dışı bırakmaz; bu durum, CFS zamanlamasının bq_xmit_all() sırasında bir görevi kesmesine izin vererek aynı işlemcideki başka bir görevin bq_enqueue() fonksiyonuna girmesine ve aynı per-CPU bq üzerinde eşzamanlı olarak işlem yapmasına olanak tanır. Bu durum birkaç yarış durumuna yol açar: 1. bq->q[] üzerinde çift serbest bırakma (double-free) / serbest bırakıldıktan sonra kullanım (use-after-free): bq_xmit_all(), cnt = bq->count değerinin anlık görüntüsünü alır, ardından çerçeveleri iletmek için bq->q[0..cnt-1] dizisinde döner. Anlık görüntüden sonra görev kesilirse, ikinci bir görev aynı bq üzerinde bq_enqueue() -> bq_xmit_all() çağrısı yaparak aynı çerçeveleri iletebilir (ve serbest bırakabilir). İlk görev devam ettiğinde, bq->q[] içindeki güncelliğini yitirmiş işaretçilerle işlem yapar ve bu da serbest bırakıldıktan sonra kullanıma neden olur. 2. bq->count ve bq->q[] bozulması: bq_xmit_all() bunları okurken, eşzamanlı çalışan bq_enqueue() fonksiyonunun bq->count ve bq->q[] değerlerini değiştirmesi. 3. dev_rx/xdp_prog kapatma yarışı: __dev_flush(), bq_xmit_all() işleminden sonra bq->dev_rx ve bq->xdp_prog değerlerini temizler. bq_xmit_all() dönüşü ile bq->dev_rx = NULL işlemi arasında görev kesilirse, kesintiye neden olan bq_enqueue() fonksiyonu dev_rx'in hala ayarlı olduğunu (NULL olmadığını) görür, bq'nun flush_list'e eklenmesini atlar ve bir çerçeveyi kuyruğa ekler. __dev_flush() devam ettiğinde, dev_rx'i temizler ve bq'yu flush_list'ten çıkararak yeni eklenen çerçevenin yetim kalmasına neden olur. 4. flush_node üzerinde __list_del_clearprev(): cpumap yarış durumuna benzer şekilde, her iki görev de aynı flush_node üzerinde __list_del_clearprev() çağırabilir; ikinci görev, zaten NULL olarak ayarlanmış olan prev işaretçisini çözümler. Aynı işlemci üzerindeki Görev A (__dev_flush -> bq_xmit_all) ve Görev B (bq_enqueue -> bq_xmit_all) arasındaki yarış durumu: Görev A (xdp_do_flush) Görev B (ndo_xdp_xmit redirect) ---------------------- -------------------------------- __dev_flush(flush_list) bq_xmit_all(bq) cnt = bq->count /* örn. 16 */ /* bq->q[] üzerinden dönmeye başla */ <-- CFS Görev A'yı keser --> bq_enqueue(dev, xdpf) bq->count == DEV_MAP_BULK_SIZE bq_xmit_all(bq, 0) cnt = bq->count /* yine 16! */ ndo_xdp_xmit(bq->q[]) /* çerçeveler sürücü tarafından serbest bırakıldı */ bq->count = 0 <-- Görev A devam eder --> ndo_xdp_xmit(bq->q[]) /* serbest bırakıldıktan sonra kullanım: çerçeveler zaten serbest bırakıldı! */ Bu sorun, xdp_dev_bulk_queue'ya bir local_lock_t ekleyerek ve bunu bq_enqueue() ile __dev_flush() içinde edinerek giderilmiştir. Bu yollar halihazırda local_bh_disable() altında çalıştığından, RT olmayan sistemlerde herhangi bir ek yük getirmeyen saf bir açıklama olan ve PREEMPT_RT üzerinde bq'ya erişimi serialize eden per-CPU uyuyan kilit sağlayan local_lock_nested_bh() kullanılmıştır.

ÖnemYüksek
CVSS7.0
İstismar olasılığı—
ÜrünLinux Kernel
Yayın25 Mar 2026
İlk görülme25 Mar 2026

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel6.18.17, 6.19.7 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel6.18 ≤ v < 6.18.17, 6.19 ≤ v < 6.19.7, 7.06.18.17, 6.19.7

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.

Intelligence 360 paketinde

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.