CVE-2021-47272
Açıklama
Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: usb: dwc3: gadget: dwc->gadget NULL ise dwc3_gadget_exit() fonksiyonundan çıkılsın dwc3_gadget_init() fonksiyonunun başarısız olabileceği olası bir senaryo mevcuttur: dwc3_set_mode() içerisinde host -> peripheral mod geçişi sırasında ve bekleyen bir gadget sürücüsü bağlanamazsa. Ardından, eğer DRD peripheral->host şeklinde başka bir mod geçişi gerçekleştirirse, sonuçlanan dwc3_gadget_exit() işlemi geçersiz ve sarkan bir dwc->gadget işaretçisine referans vermeye çalışacak ve eşlenmemiş DMA işaretçileri üzerinde dma_free_coherent() fonksiyonunu çağıracaktır. Kesin senaryo şu şekilde yeniden üretilebilir: - DWC3'ü peripheral modunda başlatın - ConfigFS gadget'ını FunctionFS örneği ile yapılandırın (veya g_ffs kullanın) - FunctionFS kullanıcı alanı uygulamasını çalıştırın (EP'leri açın, tanımlayıcıları yazın vb.) - Gadget sürücüsünü DWC3'ün UDC'sine bağlayın - DWC3'ü host moduna geçirin => dwc3_gadget_exit() çağrılır. usb_del_gadget(), ConfigFS sürücü örneğini gadget_driver_pending_list listesine ekler - FunctionFS uygulamasını durdurun (ep dosyalarını kapatır) - DWC3'ü peripheral moduna geçirin => usb_add_gadget() fonksiyonu check_pending_gadget_drivers() fonksiyonunu çağırdığında ve UDC'yi ConfigFS gadget'ına yeniden bağlamaya çalıştığında, FFS örneği FFS_ACTIVE durumunda olmadığı için (kullanıcı alanı henüz tanımlayıcıları yeniden açıp yazmadığı için, yani desc_ready!=0), işlem -19 (-ENODEV) hatasıyla başarısız olur ve böylece dwc3_gadget_init() hata verir. - DWC3'ü tekrar host moduna geçirin => dwc3_gadget_exit() tekrar çağrılır ancak bu sefer dwc->gadget geçersizdir. Kullanıcı alanının, kompozit sürücünün UDC'ye bağlanmasına izin vermeden önce FunctionFS uygulamasının hazır olduğundan emin olma sorumluluğunu üstlenmesi gerektiği savunulabilse de, bunun yapılmaması çekirdek sürücüsünde bir paniğe (panic) yol açmamalıdır. Bu sorun, dwc3_gadget_init() fonksiyonunun hata yolunda dwc->gadget değerinin NULL olarak ayarlanması ve dwc3_gadget_exit() fonksiyonuna, gadget işaretçisi geçerli olmadıkça işlemden çıkılmasını sağlayan bir kontrol eklenerek düzeltilmiştir.
Nasıl düzeltilir
- linux linux_kernel5.10.44, 5.12.11 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 5.10 ≤ v < 5.10.44, 5.11 ≤ v < 5.12.11, 5.13 | 5.10.44, 5.12.11 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.