CVE-2024-41045
Açıklama
Linux kernel'da aşağıdaki güvenlik açığı giderilmiştir: bpf: bpf_timer_cancel_and_free fonksiyonundaki işlem ertelendi Şu anda, önceki yamadaki durumun aynısı (birbirini iptal etmeye çalışan iki zamanlayıcı geri çağrımı), bpf_map_update_elem üzerinden veya daha kesin bir ifadeyle, zamanlayıcılar içeren harita öğelerinin serbest bırakılması yoluyla da tetiklenebilir. Bu durum aynı zamanda hrtimer_cancel fonksiyonuna dayandığından, önceki yamadaki deadlock durumuyla karşı karşıyadır. Zamanlayıcının async_cancel_and_free işleminden sonra sıraya alınması mümkün olmadığından, bu sorunu çözmek için hrtimer_try_to_cancel kullanmak yeterli olacaktır. async_cancel_and_free işlemi tamamlandıktan sonra, zamanlayıcının yeniden kurulabilmesi için önce yeniden başlatılması gerekir. Paralel olarak çalışan ve zamanlayıcıyı kurmaya çalışan geri çağrım başarısız olacak ve (kfree_rcu göz önüne alındığında) beklemeden bpf_hrtimer yapısını serbest bırakmak yeterli olacaktır; bpf_timer_cb ise HRTIMER_NORESTART döndürerek zamanlayıcının tekrar kurulmasını önleyecektir. Ancak, geri çağrımın bu fonksiyona girmeden önce zamanlayıcıyı kurduğu bir UAF senaryosu mevcuttur; böylece eğer iptal işlemi başarısız olursa (zamanlayıcı geri çağrısının bu rutini çağırması veya hedef zamanlayıcı geri çağrımının eşzamanlı çalışması nedeniyle). Böyle bir durumda, eğer zamanlayıcı süresinin dolması gelecekte çok uzak bir tarihteyse, bundan önce gerçekleşen RCU grace period süresinin dolması, kuyruğa alınmış olan struct hrtimer ile birlikte bpf_hrtimer durumunu serbest bırakacaktır. Bu nedenle, iptal işleminin async_cancel_and_free işleminden sonra gerçekleşmesi gerektiği açıktır ancak deadlock sorunları nedeniyle bu işlem satır içi (inline) olarak yapılamaz. Bu sebeple, rcu_head yanına bir work_struct ekleyerek (her ikisi farklı zaman noktalarında kullanıldığından alan paylaşabilirler), işi global workqueue'ya ertelemek için bpf_timer_cancel_and_free fonksiyonunu değiştirdik. Mevcut kod yorumları yeni durumu yansıtacak şekilde güncellenmiştir.
Nasıl düzeltilir
- linux linux_kernel6.9.10 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 | 5.15 ≤ v < 6.9.10, 6.10 | 6.9.10 |
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.