CVE-2026-63918
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: l2tp: l2tp_session_get_by_ifname fonksiyonunda refcount_inc_not_zero kullanımı l2tp_session_get_by_ifname() içerisindeki bir okuyucu, referans sayacı sıfıra ulaşmış bir oturuma işaret eden bir pointer döndürebilir. Getter fonksiyonu, referansı düz refcount_inc() ile alır ancak aynı dosyadaki diğer tüm oturum getter'ları (l2tp_v2_session_get, l2tp_v3_session_get ve ilgili _get_next varyantları), IDR/RCU araması refcount_dec_and_test() -> l2tp_session_free() -> kfree_rcu() ile yarışabileceği için refcount_inc_not_zero() kullanır. ifname getter'ı tek istisnadır; bu tutarsızlık 979c017803c4 ("l2tp: use list_del_rcu in l2tp_session_unhash") sonrası listede dile getirilmiştir. rcu_read_lock_bh() içindeki ve session->ifname ile eşleşen bir okuyucu, strcmp() ile refcount_inc() arasında kesintiye uğrayabilir. Eğer bu pencerede başka bir CPU üzerinde son referans düşerse, okuyucunun refcount_inc() işlemi sıfıra ulaşmış bir sayaç üzerinde çalışır. refcount_t, sıfır üzerine ekleme işlemini yakalar, "refcount_t: addition on 0; use-after-free" mesajını yazdırır, sayacı doygunluğa ulaştırır ve çağırana doygun pointer'ı döndürür. Oturum belleği, devam eden RCU okuma bölümü tarafından canlı tutulur, ancak l2tp_session_free() üzerinden kuyruğa alınan kfree_rcu() geri çağırması, lütuf süresi (grace period) kapandığında belleği serbest bırakacaktır; dönen oturumu bu noktadan sonra dereference eden bir çağırıcı, slab-use-after-free hatasıyla karşılaşır. PREEMPT_RT üzerinde local_bh_disable() her CPU'ya özel uyuyan bir kilittir ve kesinti penceresi gerçektir; standart PREEMPT çekirdeklerinde ise local_bh_disable(), pratikte CPU'lar arası yarışı kapatan bir preempt_count artırımıdır (aşağıya bakınız). Dosyadaki diğer oturum getter'larıyla uyumlu olacak şekilde refcount_inc_not_zero() kullanın ve başarısızlık durumunda liste yürütmesine devam edin. ifname getter'ı, net/l2tp/ içinde hala yalın refcount_inc() desenini kullanan tek oturum getter'ıdır; bu değişiklik dosya içi tutarlılığı yeniden sağlar. Başarı yolu değişmemiştir.
Nasıl düzeltilir
- linux linux_kernel6.12.93, 6.18.35, 7.0.12 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 6.12 ≤ v < 6.12.93, 6.13 ≤ v < 6.18.35, 6.19 ≤ v < 7.0.12, 7.1 | 6.12.93, 6.18.35, 7.0.12 |
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.