CVE-2026-22979
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: net: GRO paketləri üçün skb_segment_list funksiyasındakı yaddaş sızmasının düzəldilməsi Paket yönləndirməsi zamanı skb_segment_list() çağırıldıqda, o, GRO mühərriki tərəfindən aqreqasiya edilmiş paketləri emal edir. Tarixən, skb_segment_list funksiyasındakı seqmentasiya məntiqi fərz edirdi ki, fərdi seqmentlər valideyn SKB-dən ayrılır və öz socket yaddaş uçotu məlumatlarını daşıya bilər. Müvafiq olaraq, kod truesize dəyərini valideyndən yeni yaradılmış seqmentlərə ötürürdü. ed4cccef64c1 ("gro: fix ownership transfer") commit-indən əvvəl, skb_segment_list()-dəki bu truesize çıxılması etibarlı idi, çünki fraqmentlər hələ də orijinal socket-ə istinad daşıyırdılar. Lakin, ed4cccef64c1 ("gro: fix ownership transfer") commit-i, stekdə sonradan qeyri-qanuni yetimləşmənin qarşısını almaq üçün fraglist girişlərinin açıq şəkildə yetimləşdirilməsini (skb->sk = NULL) təmin etməklə bu davranışı dəyişmişdir. Bu dəyişiklik bütün socket yaddaş xərcinin baş SKB-də qalması demək idi, lakin skb_segment_list()-dəki müvafiq uçot məntiqi heç vaxt yenilənməmişdi. Nəticədə, mövcud kod şərtsiz olaraq hər bir fraqmentin truesize dəyərini delta_truesize-a əlavə edir və onu valideyn SKB-dən çıxır. Fraqmentlər artıq socket-ə yüklənilmədiyinə görə, bu çıxma əməliyyatı baş SKB azad edildikdə yaddaşın faktiki olaraq az sayılmasına səbəb olur. Bu isə sk_wmem_alloc dəyərinin sıfırdan fərqli qalmasına gətirib çıxarır, socket-in məhv edilməsinə mane olur və davamlı yaddaş sızmasına yol açır. Sızma, şəbəkə mühiti ləğv edilərkən KMEMLEAK vasitəsilə müşahidə edilə bilər: unreferenced object 0xffff8881e6eb9100 (size 2048): comm "ping", pid 6720, jiffies 4295492526 backtrace: kmem_cache_alloc_noprof+0x5c6/0x800 sk_prot_alloc+0x5b/0x220 sk_alloc+0x35/0xa00 inet6_create.part.0+0x303/0x10d0 __sock_create+0x248/0x640 __sys_socket+0x11b/0x1d0 skb_segment_list() eksklüziv olaraq GRO tərəfindən qurulmuş SKB_GSO_FRAGLIST paketləri üçün istifadə edildiyi üçün truesize tənzimləməsi silinmişdir. skb_release_head_state() çağırışı saxlanılmalıdır. cf673ed0e057 ("net: fix fraglist segmentation reference count leak") commit-ində sənədləşdirildiyi kimi, __copy_skb_header() zamanı üzərinə yazıla bilən SKB genişlətmələrinə olan istinadların düzgün şəkildə atılması hələ də tələb olunur.
Necə düzəltmək olar
- linux linux_kernel5.16, 6.1.161, 6.6.121, 6.9, 6.12.66, 6.18.6 və ya daha yeni versiya
- git.kernel.org/stable/c/0b27828ebd1ed3107d7929c3737adbe862e99e74
- git.kernel.org/stable/c/238e03d0466239410b72294b79494e43d4fabe77
- git.kernel.org/stable/c/3264881431e308b9c72cb8a0159d57a56d67dd79
- git.kernel.org/stable/c/88bea149db2057112af3aaf63534b24fab5858ab
- git.kernel.org/stable/c/c114a32a2e70b82d447f409f7ffcfa3058f9d5bd
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 5.15.154 ≤ v < 5.16, 6.1.85 ≤ v < 6.1.161, 6.6.26 ≤ v < 6.6.121, 6.8.5 ≤ v < 6.9, 6.9.1 ≤ v < 6.12.66, 6.13 ≤ v < 6.18.6, 6.9, 6.19 | 5.16, 6.1.161, 6.6.121, 6.9, 6.12.66, 6.18.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.