CVE-2025-39863
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: wifi: brcmfmac: brcmf_btcoex_info işi yenidən planlaşdırılarkən yaranan use-after-free xətasının düzəldilməsi brcmf_btcoex_detach() funksiyası btcoex taymerini yalnız timer_on bayrağı false olduqda söndürür. Lakin taymer idarəçisi kimi çalışan brcmf_btcoex_timerfunc() funksiyası timer_on dəyişənini false olaraq təyin edir. Bu, kritik yarış şəraitləri (race conditions) yaradır: 1. Əgər brcmf_btcoex_timerfunc() icra olunarkən brcmf_btcoex_detach() çağırılarsa, o, timer_on dəyişənini false görə bilər və timer_shutdown_sync() çağırışını ötürə bilər. 2. Daha sonra brcmf_btcoex_timerfunc(), cancel_work_sync() icra edildikdən sonra brcmf_btcoex_info işçisini (worker) yenidən planlaşdıra bilər ki, bu da use-after-free xətalarına səbəb olur. Use-after-free xətaları, brcmf_btcoex_info strukturunun azad edilmə vaxtının onun işçi axınının (worker thread) icrasına nisbəti ilə bağlı iki fərqli ssenaridə baş verir. Ssenari 1: İşçi planlaşdırılmazdan əvvəl azad edilir brcmf_btcoex_info işçi planlaşdırılmamışdan əvvəl yaddaşdan silinir. Hədəf yaddaş azad edildikdən sonra schedule_work(&bt_local->work) çağırıldıqda yarış şəraiti yarana bilər. Hadisələrin ardıcıllığı aşağıda detallandırılıb: CPU0 | CPU1 brcmf_btcoex_detach | brcmf_btcoex_timerfunc | bt_local->timer_on = false; if (cfg->btcoex->timer_on) | ... | cancel_work_sync(); | ... | kfree(cfg->btcoex); // FREE | | schedule_work(&bt_local->work); // USE Ssenari 2: İşçi planlaşdırıldıqdan sonra azad edilir brcmf_btcoex_info işçi planlaşdırıldıqdan sonra, lakin onun icrasından əvvəl və ya icrası zamanı azad edilir. Bu halda, brcmf_btcoex_handler() daxilindəki ifadələr — məsələn, container_of makrosu və növbəti brcmf_btcoex_info obyektinin istinadları use-after-free girişinə səbəb olacaqdır. Aşağıdakı zaman qrafiki bu ssenarini nümayiş etdirir: CPU0 | CPU1 brcmf_btcoex_detach | brcmf_btcoex_timerfunc | bt_local->timer_on = false; if (cfg->btcoex->timer_on) | ... | cancel_work_sync(); | ... | schedule_work(); // Reschedule | kfree(cfg->btcoex); // FREE | brcmf_btcoex_handler() // Worker /* | btci = container_of(....); // USE Yuxarıdakı kfree() həmçinin | ... işçinin icrası zamanı | btci-> // USE hər hansı bir anda baş verə | bilər | */ | Yarış şəraitlərini həll etmək üçün şərt yoxlamasını ləğv edin və timer_shutdown_sync() funksiyasını birbaşa çağırın. O, cari vəziyyətindən asılı olmayaraq taymeri etibarlı şəkildə deaktiv edə bilər. Dayandırıldıqdan sonra timer_on vəziyyəti false olaraq təyin edilir.
Necə düzəltmək olar
- linux linux_kernel6.6.105, 6.12.46, 6.16.6 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 3.10 ≤ v < 6.6.105, 6.7 ≤ v < 6.12.46, 6.13 ≤ v < 6.16.6, 6.17 | 6.6.105, 6.12.46, 6.16.6 |
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.