CVE-2026-63978
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: net/handshake: Net namespace çıxışında gözləyən sorğuların təmizlənməsi handshake_net_exit() funksiyasındakı list_splice_init() funksiyasına ötürülən arqumentlər tərs düzülüb. Bu çağırış lokal boş "requests" siyahısını hn->hn_requests üzərinə köçürür və lokal siyahını boş saxlayır, buna görə də növbəti təmizləmə dövrü sıfır iterasiya ilə işləyir. Hələ qəbul edilməmiş gözləyən handshake sorğuları net namespace məhv edildikdə ləğv edilmir; hər biri soket faylına və handshake_req ayırmasına istinad saxlayır. Mənbəni və təyinatı sənədləşdirilmiş ardıcıllıqla ötürün (list_splice_init(list, head) list-i head üzərinə köçürür), beləliklə gözləyən siyahı lokal müvəqqəti siyahıya köçürülür və handshake_complete() vasitəsilə təmizlənir. Splice istiqamətinin düzəldilməsi siyahının korlanması ilə bağlı yarış şəraitini (race condition) ortaya çıxarır. Splice-dən sonra hər bir req->hr_list hələ də boş olmayan keçid göstəricilərinə malik olur və hn_requests əvəzinə stek-lokal müvəqqəti siyahını əhatə edir. Eyni vaxtda baş verən handshake_req_cancel() — məsələn, netns istinadı alınmamış nüvə soketində sunrpc-nin TLS taymautu — rhashtable vasitəsilə sorğunu tapır, remove_pending() funksiyasını çağırır və !list_empty(&req->hr_list) olduğunu görür. Daha sonra __remove_pending_locked() funksiyası təmizləmə prosesi davam edərkən müvəqqəti siyahıdan bir element üçün list_del_init() çağıraraq onu korlayır. Təmizləmə dövründən sonra gələn eyni çağırış isə element üzərində list_del() icra etdikdən sonra LIST_POISON ilə qarşılaşır. Təmizləmə prosesi davam edərkən remove_pending() funksiyası hn_lock altında HANDSHAKE_F_NET_DRAINING yoxlamasını aparmalı və "tapılmadı" hesabatı verməlidir. Mülkiyyət artıq təmizləmə prosesinə keçib; handshake_complete() funksiyasının HANDSHAKE_F_REQ_COMPLETED üzərindəki mövcud test_and_set əməliyyatı təmizləmə və ləğv etmə arasında istehlakçının hp_done funksiyasını kimin çağıracağını hələ də nizamlayır. Təmizləmə zamanı list_del() əvəzinə list_del_init() istifadə edin ki, təmizləmə elementi buraxdıqdan sonra req->hr_list LIST_POISON daşımasın. remove_pending() funksiyasındakı DRAINING qoruyucusu cancel funksiyasının false qaytarmasına səbəb olur, lakin cancel hələ də HANDSHAKE_F_REQ_COMPLETED üzərindəki test_and_set_bit hissəsinə keçir və sorğunun hr_file istinadını azaldır. Başqa bir pin olmadan, əgər bu sonuncu istinaddırsa, sk_destruct sorğu hələ də təmizləmə dövrünün lokal siyahısına bağlı olduğu halda onu azad edir. Siyahını buraxmazdan əvvəl hn_lock altında hər bir sorğunun hr_file-nı pinleyin və dövr sorğu ilə işini bitirdikdən sonra həmin təmizləmə pinini buraxın.
Necə düzəltmək olar
- Linux Linuxee4b2ba9d30155f9945811cd3c0c1b06d45787a9, 9ec20c9a5a04f2c3f1cf65d21f886d7aaa6189cd, 2bf24a7e190aae0ea47c78099938ae056c622e44, 8c35539db0ab0bfa1ea44efab00b053261a69469, ea5fe6a73ca57e5150b8a38b341aef2636eb72f0 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| Linux Linux | 3b3009ea8abb713b022d94fba95ec270cf6e7eae ≤ v < ee4b2ba9d30155f9945811cd3c0c1b06d45787a9, 3b3009ea8abb713b022d94fba95ec270cf6e7eae ≤ v < 9ec20c9a5a04f2c3f1cf65d21f886d7aaa6189cd, 3b3009ea8abb713b022d94fba95ec270cf6e7eae ≤ v < 2bf24a7e190aae0ea47c78099938ae056c622e44, 3b3009ea8abb713b022d94fba95ec270cf6e7eae ≤ v < 8c35539db0ab0bfa1ea44efab00b053261a69469, 3b3009ea8abb713b022d94fba95ec270cf6e7eae ≤ v < ea5fe6a73ca57e5150b8a38b341aef2636eb72f0, 6.4 | ee4b2ba9d30155f9945811cd3c0c1b06d45787a9, 9ec20c9a5a04f2c3f1cf65d21f886d7aaa6189cd, 2bf24a7e190aae0ea47c78099938ae056c622e44, 8c35539db0ab0bfa1ea44efab00b053261a69469, ea5fe6a73ca57e5150b8a38b341aef2636eb72f0 |
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.