CVE-2026-43050
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: atm: lec: sock_def_readable() fonksiyonundaki serbest bırakıldıktan sonra kullanım (use-after-free) hatası düzeltildi lec_atm_close() fonksiyonunun priv->lecd değerini NULL olarak ayarlaması ile send_to_lecd(), lec_handle_bridge() ve lec_atm_send() fonksiyonlarındaki eş zamanlı priv->lecd erişimi arasında bir yarış durumu (race condition) mevcuttur. Bir iş parçacığı soketi hala kullanırken soketin RCU aracılığıyla serbest bırakılması durumunda, sock_def_readable() fonksiyonu soketin bekleme kuyruğuna erişirken bir serbest bırakıldıktan sonra kullanım (use-after-free) durumu oluşur. Kök neden, lec_atm_close() fonksiyonunun herhangi bir senkronizasyon olmadan priv->lecd değerini temizlemesi, çağıranların ise eş zamanlı yıkıma karşı herhangi bir koruma olmaksızın priv->lecd referansını çözmesidir. Bu sorun, priv->lecd bir RCU korumalı işaretçiye dönüştürülerek düzeltilmiştir: - lec.h dosyasında priv->lecd __rcu olarak işaretlendi - Güvenli işaretçi ataması için lec_atm_close() ve lecd_attach() fonksiyonlarında rcu_assign_pointer() kullanıldı - lec_start_xmit(), lec_push(), send_to_lecd() ve lecd_attach() fonksiyonlarında, işaretçinin referansını çözmeyen NULL kontrolleri için rcu_access_pointer() kullanıldı - lecd yapısına güvenli erişim sağlamak için send_to_lecd(), lec_handle_bridge() ve lec_atm_send() fonksiyonlarında rcu_read_lock/rcu_dereference/rcu_read_unlock kullanıldı - Devam etmeden önce tüm okuyucuların tamamlandığından emin olmak için lec_atm_close() fonksiyonunda rcu_assign_pointer() ardından synchronize_rcu() kullanıldı. lec_atm_close() fonksiyonu, uyuyan bir kilit olan lock_sock() kilidini tutan vcc_release() tarafından çağrıldığı için bu işlem güvenlidir. - vcc_destroy_socket() zaten lec_atm_close() döndükten sonra boşaltma işlemini gerçekleştirdiği için lec_atm_close() içerisindeki manuel sk_receive_queue boşaltma işlemi kaldırıldı. v2: Yarış durumunu uygun şekilde düzeltmek için spinlock + sock_hold/put yaklaşımından RCU'ya geçildi. Eric Dumazet tarafından belirtilen v1 spinlock yaklaşımının iki sorunu vardı: 1. priv->lecd değerine yerel bir kopya kullanmak yerine, kilit serbest bırakıldıktan sonra hala doğrudan erişiliyordu. 2. Timer ve workqueue yolları netif_stop_queue() fonksiyonunu baypas ettiği için, spinlock, lec_atm_close() sk_receive_queue'yu boşalttıktan sonra paketlerin kuyruğa alınmasını engellemiyordu. Not: Syzbot yama testi denenmiş ancak test VM'si muhtemelen bu düzeltmeyle ilgisi olmayan bir QEMU AHCI emülasyon sorunu nedeniyle "Connection to localhost closed by remote host" hatasıyla beklenmedik şekilde sonlanmıştır. "make W=1 net/atm/lec.o" ile yapılan derleme testi başarıyla tamamlanmıştır.
Nasıl düzeltilir
- linux linux_kernel5.10.253, 5.15.203, 6.1.168, 6.6.134, 6.12.81, 6.18.22, 6.19.12 ya da sonraki bir sürüm
- git.kernel.org/stable/c/317843d5355062020649124eb4a0d7acbcc3f53e
- git.kernel.org/stable/c/3989740fa4978e1d2d51ecc62be1b01093e104ad
- git.kernel.org/stable/c/3e8b25f32f2f35549d03d77da030a24a45bdef5b
- git.kernel.org/stable/c/5fbbb1ff936d7ff9528d929c1549977e8123d8a8
- git.kernel.org/stable/c/750a33f417f3d196b86375f8d9f8938bacf130fe
- git.kernel.org/stable/c/922814879542c2e397b0e9641fd36b8202a8e555
- git.kernel.org/stable/c/abc10f85a3965ac14b9ed7ad3e67b35604a63aa3
- git.kernel.org/stable/c/b256d055da47258e63f8b40965f276c5f23d229a
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 2.6.12.1 ≤ v < 5.10.253, 5.11 ≤ v < 5.15.203, 5.16 ≤ v < 6.1.168, 6.2 ≤ v < 6.6.134, 6.7 ≤ v < 6.12.81, 6.13 ≤ v < 6.18.22, 6.19 ≤ v < 6.19.12, 2.6.12, 7.0 | 5.10.253, 5.15.203, 6.1.168, 6.6.134, 6.12.81, 6.18.22, 6.19.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.