CVE-2026-43050
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: atm: lec: sock_def_readable() funksiyasında use-after-free xətası düzəldildi lec_atm_close() tərəfindən priv->lecd dəyişəninin NULL təyin edilməsi ilə send_to_lecd(), lec_handle_bridge() və lec_atm_send() funksiyalarında priv->lecd-yə eyni vaxtda daxil olma arasında yarış şəraiti (race condition) mövcuddur. Bir axın hələ də soketdən istifadə edərkən, soket RCU vasitəsilə azad edildikdə, soketin gözləmə növbəsinə müraciət zamanı sock_def_readable() funksiyasında use-after-free xətası baş verir. Problemin əsas səbəbi ondur ki, lec_atm_close() heç bir sinxronizasiya olmadan priv->lecd-ni təmizləyir, çağırıcılar isə eyni vaxtda baş verən sökülməyə qarşı heç bir mühafizə olmadan priv->lecd-ni dereference edirlər. Bu problem priv->lecd-nin RCU ilə qorunan göstəriciyə çevrilməsi ilə həll edilir: - lec.h faylında priv->lecd __rcu olaraq işarələndi - Təhlükəsiz göstərici təyinatı üçün lec_atm_close() və lecd_attach() funksiyalarında rcu_assign_pointer() istifadə edildi - lec_start_xmit(), lec_push(), send_to_lecd() və lecd_attach() funksiyalarında göstəricini dereference etməyən NULL yoxlamaları üçün rcu_access_pointer() istifadə edildi - lecd-yə təhlükəsiz giriş üçün send_to_lecd(), lec_handle_bridge() və lec_atm_send() funksiyalarında rcu_read_lock/rcu_dereference/rcu_read_unlock istifadə edildi - Bütün oxucuların prosesi tamamladığından əmin olmaq üçün lec_atm_close() funksiyasında rcu_assign_pointer()-dən sonra synchronize_rcu() istifadə edildi. Bu təhlükəsizdir, çünki lec_atm_close() lock_sock() (yuxuya gedən kilid) tutan vcc_release() tərəfindən çağırılır. - lec_atm_close() funksiyasından manual sk_receive_queue boşaltma əməliyyatı çıxarıldı, çünki vcc_destroy_socket() artıq lec_atm_close() geri döndükdən sonra onu boşaldır. v2: Yarış şəraitini düzgün şəkildə həll etmək üçün spinlock + sock_hold/put yanaşmasından RCU-ya keçid edildi. Eric Dumazet tərəfindən v1 spinlock yanaşmasında iki problem qeyd edilmişdi: 1. Kilid buraxıldıqdan sonra lokal nüsxədən istifadə etmək əvəzinə priv->lecd-yə hələ də birbaşa müraciət edilirdi. 2. Spinlock, lec_atm_close() sk_receive_queue-nu boşaltdıqdan sonra paketlərin növbəyə alınmasının qarşısını almırdı, çünki taymer və workqueue yolları netif_stop_queue() funksiyasını yan keçir. Qeyd: Syzbot yaması testi cəhd edildi, lakin test VM-i çox güman ki, bu düzəlişlə əlaqəsi olmayan QEMU AHCI emulyasiyası problemi səbəbindən "Connection to localhost closed by remote host" mesajı ilə gözlənilmədən dayandı. "make W=1 net/atm/lec.o" ilə kompilyasiya testi uğurla tamamlandı.
Necə düzəltmək olar
- linux linux_kernel5.10.253, 5.15.203, 6.1.168, 6.6.134, 6.12.81, 6.18.22, 6.19.12 və ya daha yeni versiya
- 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
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| 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 |
Versiyanızı yoxlayın
Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.
Attack Surface Management
Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.