CVE-2025-21823
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: batman-adv: İdarə olunmayan ELP metrik işçisinin ləğvi ELP işçisi bir interfeys vasitəsilə "əlçatan" olan bütün qonşular üçün yeni metrik dəyərlərini hesablamalıdır. İstifadə olunan bəzi metrik mənbələri yuxuya gedə bilən kilidlər tələb edir. Bu yuxu, qeyd edilmiş qonşular üçün istifadə olunan RCU siyahı iteratoru ilə uyğun gəlmir. Bu problemi həll etmək üçün ilkin yanaşma hər qonşu üçün başqa bir iş elementini növbəyə düzmək və sonra bunu yeni kontekstdə icra etmək idi. Bu, RCU və might_sleep() arasındakı münaqişəni həll etsə də, ciddi problemləri var idi: İş elementi artıq lazım olmadıqda — məsələn, əlaqəli interfeyslərdən biri silindikdə və ya batman-adv modulu yükləmədən çıxarıldıqda — onu dayandıran heç nə yox idi, bu isə potensial olaraq yanlış yaddaş girişlərinə səbəb olurdu. Metrik işçisini birbaşa ləğv etməyin də müxtəlif problemləri var: * Deaktiv ediləcək interfeys üçün cancel_work_sync funksiyası rtnl_lock tutulmuş halda çağırılır. Lakin ELP metrik işçisindəki kod da rtnl_lock()-dan istifadə etməyə çalışır ki, bu da belə vəziyyətdə heç vaxt geri dönməyəcəkdir. Bu həmçinin o deməkdir ki, cancel_work_sync işçinin tamamlanmasını gözlədiyi üçün heç vaxt geri dönməyəcək. * Deaktiv ediləcək interfeys üçün qonşu siyahısı üzrə iterasiya hazırda RCU spesifik metodları ilə həyata keçirilir. Bu o deməkdir ki, müvafiq spinlock olmadan iterasiya zamanı bəzi elementlərin ötürülməsi mümkündür — bu davranış dövri metrik yoxlaması üçün məqbuldur, lakin təmizləmə proseduru (hansı ki, hələ də çalışan bütün işçiləri "dayandırmalıdır") üçün məqbul deyil. Daha yaxşı yanaşma, hər interfeys üçün ayrıca qonşu metrik işçisindən imtina etmək və hər şeyi interfeys işçisində idarə etməkdir. Orijinal problemlər aşağıdakılarla həll edilir: * Yeni metrik məlumatlar tələb edən qonşuların siyahısının RCU qorumalı kontekst daxilində yaradılması, metriklərin isə yeni siyahıya uyğun olaraq RCU qorumalı kontekstdən kənarda toplanması. * İnterfeysin silinməsi kodu (rtnl_lock tutulmuş halda çağırılır) daxilində cancel_delayed_work_sync çağırılanda deadloct-un qarşısını almaq üçün metrik toplama kodu daxilində yalnız rcu_trylock-dan istifadə edilməsi.
Necə düzəltmək olar
- linux linux_kernel5.4.291, 5.10.235, 5.15.179, 6.1.129, 6.6.79, 6.12.16, 6.13.4 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 | 4.6 ≤ v < 5.4.291, 5.5 ≤ v < 5.10.235, 5.11 ≤ v < 5.15.179, 5.16 ≤ v < 6.1.129, 6.2 ≤ v < 6.6.79, 6.7 ≤ v < 6.12.16, 6.13 ≤ v < 6.13.4, 6.14 | 5.4.291, 5.10.235, 5.15.179, 6.1.129, 6.6.79, 6.12.16, 6.13.4 |
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.