CVE-2022-50220

Yüksək

Təsvir

Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: usbnet: bağlantının kəsilməsi zamanı linkwatch-da yaranan use-after-free xətasının düzəldilməsi usbnet, yuxuya gedə bilən tapşırıqları yerinə yetirmək üçün usbnet_deferred_kevent() işini istifadə edir. Bağlantı kəsildikdə, bu işin tamamlanması əvvəllər ->ndo_stop() funksiyasında gözlənilirdi. Lakin 2003-cü ildə "[PATCH] USB: usbnet, prevent exotic rtnl deadlock" adlı tarixi commit ilə bu proses ->disconnect() funksiyasına köçürülüb: https://git.kernel.org/tglx/history/c/0f138bbfd83c Bu dəyişiklik həmin vaxt nüvənin workqueue tətbiqinin tək bir işin tamamlanmasını gözləməyə imkan verməməsi səbəbindən edilmişdi. Bütün işlərin tamamlanmasını gözləmək üçün flush_scheduled_work() çağırılmalı idi və bu, ->ndo_stop() daxilində rtnl_mutex tutulmuş halda usbnet_deferred_kevent() gözlənilərkən deadlock-a səbəb ola bilirdi. Həmin commit bir problemi həll etsə də, digərini yaratdı: aqc111.c, asix_devices.c, ax88179_178a.c, ch9200.c və smsc75xx.c USB Ethernet drayverlərində use-after-free xətasına yol açır: * Əgər drayverlər bağlantının kəsilməsindən dərhal əvvəl link dəyişikliyi interrupsiyası alarsa, onlar özlərinin (yuxuya gedə bilməyən) ->status() callback funksiyasında EVENT_LINK_RESET hadisəsini tetikləyir və usbnet_deferred_kevent()-i planlaşdırırlar. * usbnet_deferred_kevent() drayverin ->link_reset() callback funksiyasını çağırır, o isə netif_carrier_{on,off}() funksiyalarını çağırır. * Bu isə öz növbəsində linkwatch_event() işini planlaşdırır. usbnet_deferred_kevent() funksiyasının unregister_netdev()-dən sonra gözlənilməsi səbəbindən, netif_carrier_{on,off}() qeydiyyatdan çıxarılmış netdev üzərində əməliyyat apara bilər və linkwatch_event() free_netdev()-dən sonra işləyə bilər ki, bu da use-after-free xətasına səbəb olur. 2010-cu ildə 23f333a2bfaf ("drivers/net: don't use flush_scheduled_work()") commit-i ilə usbnet bütün işləri gözləmək əvəzinə, yalnız usbnet_deferred_kevent()-in tək bir nüsxəsini gözləyəcək şəkildə dəyişdirildi. Təəssüf ki, həmin commit gözləmə prosesini yenidən ->ndo_stop() funksiyasına qaytarmağı unutmuşdu. Bu çatışmazlıq nəhayət aradan qaldırıldı.

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc18 iyn 2025
İlk görülmə18 iyn 2025

Necə düzəltmək olar

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel2.6.38 ≤ v < 4.9.326, 4.10 ≤ v < 4.14.291, 4.15 ≤ v < 4.19.256, 4.20 ≤ v < 5.4.211, 5.5 ≤ v < 5.10.137, 5.11 ≤ v < 5.15.61, 5.16 ≤ v < 5.18.18, 5.19 ≤ v < 5.19.24.9.326, 4.14.291, 4.19.256, 5.4.211, 5.10.137, 5.15.61, 5.18.18, 5.19.2

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.

Intelligence 360 paketində

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.

CVE-2022-50220 · Linux Kernel · Dark Radar