CVE-2022-49872
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: net: gso: qarışıq head ayırma növləri olan frag_list-də panikanın düzəldilməsi 3dcbdb134f32 commit-indən ("net: gso: Fix skb_segment splat when splitting gso_size mangled skb having linear-headed frag_list") bəri GRO paketinin gso_size dəyərini dəyişməyə icazə verilir. Lakin həmin commit belə bir fərziyyəyə əsaslanır ki, "list_skb üzvlərindən birincisini yoxlamaq kifayətdir; yəni əgər list_skb üzvlərindən hər hansı birinin head_frag olmayan başlığı varsa, deməli birincinin də var". Məlum olur ki, bu fərziyyə doğru deyil. vmxnet3 sürücüsü ilə frag_list-dəki skb-lərin fərqli head_frag dəyərlərinə malik olduğu halda skb_segment-də BUG_ON-un işə düşdüyünü müşahidə etmişik. Bu, ona görə baş verir ki, __netdev_alloc_skb və __napi_alloc_skb tələb olunan ölçüdən asılı olaraq səhifə əsaslı və ya kmalloc ilə ayrılmış skb qaytara bilər. Nəticədə, GRO paketindəki son kiçik skb kmalloc ilə ayrılmış ola bilər. Bunun düzəldilə biləcəyi üç fərqli yer var: (1) GRO-da head_frag yoxlanıla və fərqli head_frag dəyərlərinə malik skb-lərin GRO-ya daxil edilməsinə icazə verilməyə bilərdi. Lakin bu, gso_size dəyişdirilməmiş normal yönləndirmə yollarında performansın pisləşməsinə gətirib çıxarardı, çünki son paketdə !head_frag problem yaratmır. (2) bpf_skb_net_grow və bpf_skb_net_shrink funksiyalarında NETIF_F_SG-nin arzuolunmaz olduğunu göstərən bayraq qoyula bilərdi. Bu, sk_buff-da bir bit tələb edərdi. Bundan əlavə, frag_list-dəki bütün skb-lər səhifə əsaslı olduqda bu bayraq silinə bilər. Yaxşı performansı qorumaq üçün bpf_skb_net_grow/shrink frag_list-i gəzməli olardı. (3) NETIF_F_SG-nin silinməli olub-olmadığını müəyyən edərkən skb_segment-də frag_list-i gəzmək. Bu, təbii ki, işi ləngidir. Bu yamaq (3) variantını tətbiq edir. skb_segment-də performansa təsiri məhdudlaşdırmaq üçün siyahı yalnız gso_size dəyişdirilmiş və SKB_GSO_DODGY bayrağı qoyulmuş skb-lər üçün gəzilir. Beləliklə, normal yollar buna düşməyəcək. Yalnız son skb-ni yoxlaya bilərdik, lakin hər halda bütün siyahını gəzməli olduğumuz üçün təhlükəsiz tərəfdə qalaq.
Necə düzəltmək olar
- linux linux_kernel4.9.334, 4.14.300, 4.19.267, 5.3, 5.4.225, 5.10.155, 5.15.79, 6.0.9 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.9.194 ≤ v < 4.9.334, 4.14.145 ≤ v < 4.14.300, 4.19.74 ≤ v < 4.19.267, 5.2.16 ≤ v < 5.3, 5.3.1 ≤ v < 5.4.225, 5.5 ≤ v < 5.10.155, 5.11 ≤ v < 5.15.79, 5.16 ≤ v < 6.0.9, 5.3, 6.1 | 4.9.334, 4.14.300, 4.19.267, 5.3, 5.4.225, 5.10.155, 5.15.79, 6.0.9 |
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.