CVE-2021-47272
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: usb: dwc3: gadget: əgər dwc->gadget NULL-dursa, dwc3_gadget_exit() funksiyasından çıxış et Belə bir mümkün ssenari mövcuddur ki, burada dwc3_gadget_init() uğursuz ola bilər: dwc3_set_mode() funksiyasında host -> peripheral rejimi dəyişdirilərkən və gözləyən gadget drayveri bağlanmadıqda (bind). Daha sonra, əgər DRD yenidən peripheral->host rejiminə keçid edərsə, nəticədə çağırılan dwc3_gadget_exit() funksiyası etibarsız və asılı qalmış (dangling) dwc->gadget göstəricisinə müraciət etməyə çalışacaq, həmçinin xəritələnməmiş DMA göstəriciləri üzərində dma_free_coherent() funksiyasını çağıracaqdır. Dəqiq ssenari aşağıdakı kimi təkrar yaradıla bilər: - DWC3-ü peripheral rejimində başladın - ConfigFS gadget-ını FunctionFS instansiyası ilə konfiqurasiya edin (və ya g_ffs istifadə edin) - FunctionFS istifadəçi sahəsi (userspace) tətbiqini işə salın (EP-ləri açın, deskriptorları yazın və s.) - Gadget drayverini DWC3-ün UDC-sinə bağlayın (bind) - DWC3-ü host rejiminə keçirin => dwc3_gadget_exit() çağırılır. usb_del_gadget() ConfigFS drayver instansiyasını gadget_driver_pending_list siyahısına əlavə edir - FunctionFS tətbiqini dayandırın (ep fayllarını bağlayır) - DWC3-ü peripheral rejiminə keçirin => dwc3_gadget_init() uğursuz olur, çünki usb_add_gadget() funksiyası check_pending_gadget_drivers() çağırır və UDC-ni ConfigFS gadget-ına yenidən bağlamağa çalışır, lakin FFS instansiyası FFS_ACTIVE vəziyyətində olmadığı üçün (istifadəçi sahəsi hələ deskriptorları yenidən açmayıb və yazmayıb, yəni desc_ready!=0) bu proses -19 (-ENODEV) xətası ilə başa çatır. - DWC3-ü yenidən host rejiminə qaytarın => dwc3_gadget_exit() yenidən çağırılır, lakin bu dəfə dwc->gadget etibarsızdır. İstifadəçi sahəsinin kompozit drayverin UDC-yə bağlanmasına icazə verməzdən əvvəl FunctionFS tətbiqinin hazır olduğundan əmin olmaq məsuliyyətini daşıdığı iddia edilə bilsə də, bunun yerinə yetirilməməsi nüvə drayverində panikaya səbəb olmamalıdır. Bu problem, dwc3_gadget_init() funksiyasının uğursuzluq yolunda dwc->gadget dəyərini NULL təyin etməklə və dwc3_gadget_exit() funksiyasına gadget göstəricisi etibarlı olmadıqda prosesi dayandıran yoxlama əlavə etməklə həll edilmişdir.
Necə düzəltmək olar
- linux linux_kernel5.10.44, 5.12.11 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.10 ≤ v < 5.10.44, 5.11 ≤ v < 5.12.11, 5.13 | 5.10.44, 5.12.11 |
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.