CVE-2022-49398
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: usb: dwc3: gadget: giveback istifadə edildikdə list_for_each_entry_safe() funksiyasının əvəz edilməsi list_for_each_entry_safe() makrosu cari elementi (n) və ondan sonrakı elementi (n+1) saxlayır ki, siyahını korlamadan n təhlükəsiz şəkildə silinsin. Lakin, siyahıda gəzərkən və gadget giveback vasitəsilə elementləri silərkən, DWC3 kilidi qısaca sərbəst buraxılır və bu, digər rutinlərin icrasına imkan verir. Belə bir vəziyyət yaranır ki, dwc3_gadget_ep_cleanup_cancelled_requests() vasitəsilə cancelled_list-dən elementlər silindikdə, eyni zamanda pullup disable rutini də paralel olaraq işləyir (UDC unbind səbəbi ilə). Təmizləmə rutini n-i sildiyi, pullup disable isə n+1-i sildiyi üçün, təmizləmə rutini DWC3 kilidini yenidən götürdükdə artıq silinmiş/işlənmiş sorğuya istinad edir. Siyahı sazlamaları (list debug) aktiv olduqda, bu, sistemin çökməsinə (panic) səbəb olur. Gadget giveback istifadə olunan bütün yerlərdə makrosun əvəzləndiyindən əmin olun. Nümunə çağırış stekləri: Thread#1: __dwc3_gadget_ep_set_halt() - CLEAR HALT -> dwc3_gadget_ep_cleanup_cancelled_requests() ->list_for_each_entry_safe() ->dwc3_gadget_giveback(n) ->dwc3_gadget_del_and_unmap_request()- n silindi [cancelled_list] ->spin_unlock ->Thread#2 icra olunur ... ->dwc3_gadget_giveback(n+1) ->Artıq silinib! Thread#2: dwc3_gadget_pullup() ->dwc3 spin_lock gözlənilir ... ->Thread#1 kilidi sərbəst buraxdı ->dwc3_stop_active_transfers() ->dwc3_remove_requests() ->cancelled_list-dən n+1 elementi götürür (n Thread#1 tərəfindən silinib) ->dwc3_gadget_giveback() ->dwc3_gadget_del_and_unmap_request()- n+1 silindi [cancelled_list] ->spin_unlock
Necə düzəltmək olar
- linux linux_kernel4.20, 5.15.47, 5.17.15, 5.18.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 | 4.19.57 ≤ v < 4.20, 5.0 ≤ v < 5.15.47, 5.16 ≤ v < 5.17.15, 5.18 ≤ v < 5.18.4 | 4.20, 5.15.47, 5.17.15, 5.18.4 |
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.