CVE-2025-37865
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: net: dsa: mv88e6xxx: VLAN-lar silinərkən və MST dəstəklənmədikdə -ENOENT xətasının düzəldilməsi Russell King bildirir ki, ZII dev rev B cihazında istifadəçi portundan körpü VLAN-ının silinməsi -ENOENT xətası ilə uğursuz olur: https://lore.kernel.org/netdev/[email protected]/ Bu, mv88e6xxx_port_vlan_leave() -> mv88e6xxx_mst_put() funksiyasından qaynaqlanır; həmin funksiya &chip->msts daxilində SID ilə əlaqəli olan MST yazısını tapmağa çalışır, lakin tapa bilmir və nəticədə -ENOENT qaytarır. Lakin biz bilirik ki, bu çip ümumiyyətlə MST-ni dəstəkləmir, buna görə də bu təəccüblü deyil. Sual ondadır ki, niyə mv88e6xxx_mst_put() funksiyasındakı yoxlama erkən çıxış etmir: if (!sid) return 0; Cavab sadə görünür: sid dəyişəni vlan.sid-dən gəlir və ehtimal olunur ki, o, əvvəllər mv88e6xxx_vtu_get() tərəfindən doldurulub. Lakin bəzi chip->info->ops->vtu_getnext() implementasiyaları vlan.sid-i doldurmur, məsələn, mv88e6185_g1_vtu_getnext()-ə baxın. Bu halda, daha sonra mv88e6xxx_port_vlan_leave() funksiyasında biz sadəcə stek yaddaşının qalıqları olan zibil bir sid-dən istifadə edirik. sid == 0 yoxlaması bütün qeyri-körpü VLAN və ya standart MSTI-yə yönləndirilmiş körpü VLAN hallarını əhatə edir. Bəzi chiplər üçün SID 0 etibarlıdır və mv88e6xxx_stu_setup() tərəfindən quraşdırılır. STU-nu dəstəkləməyən çip implicit olaraq yalnız bütün VLAN-ların standart MSTI-yə yönləndirilməsini dəstəkləyəcəkdi, ona görə də SID 0 etibarlı olmasa belə, vlan strukturunu sıfırla başlatmaq xətanı düzəltmək üçün kifayət edərdi, çünki vlan.sid == 0 yoxlaması artıq mövcuddur və eyni (doğru) davranışa səbəb olur. Kifayət edəcək digər variant mv88e6xxx_mst_put() daxilində, mv88e6xxx_mst_get()-də artıq mövcud olan yoxlamaya simmetrik olaraq mv88e6xxx_has_stu() yoxlamasını əlavə etmək olardı. Lakin bu yerləşdirmə o deməkdir ki, çağıran tərəf vlan.sid-i dereference etməli olacaq, bu isə onun başlanğıc dəyəri təyin edilməmiş yaddaşa müraciət etməsinə səbəb olacaq ki, bu da sonradan nəzərə alınmasa belə, yaxşı bir yanaşma deyil. Beləliklə, həm sid == 0 təsadüfünə güvənməmək, həm də müvəqqəti olaraq müraciət edilə bilən başlanğıc dəyəri təyin edilməmiş struktur sahələrinin qarşısını almaq üçün hər iki modifikasiyanı həyata keçiririk.
Necə düzəltmək olar
- linux linux_kernel6.1.135, 6.6.88, 6.12.25, 6.14.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 | 5.18 ≤ v < 6.1.135, 6.2 ≤ v < 6.6.88, 6.7 ≤ v < 6.12.25, 6.13 ≤ v < 6.14.4, 6.15 | 6.1.135, 6.6.88, 6.12.25, 6.14.4 |
| debian debian_linux | 11.0 | — |
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.