CVE-2022-49943

Orta

Açıklama

Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: USB: gadget: udc_mutex için belirsiz lockdep ihlali düzeltildi gadget çekirdeğinde udc_lock mutex kapsamını genişleten yakın tarihli bir commit, belirsiz ve biraz tuhaf bir lockdep ihlaline neden oldu. Özetle: ====================================================== WARNING: possible circular locking dependency detected 5.19.0-rc7+ #12510 Not tainted ------------------------------------------------------ udevadm/312 şu kilidi almaya çalışıyor: ffff80000aae1058 (udc_lock){+.+.}-{3:3}, konum: usb_udc_uevent+0x54/0xe0 ancak görev halihazırda şu kilidi tutuyor: ffff000002277548 (kn->active#4){++++}-{0:0}, konum: kernfs_seq_start+0x34/0xe0 bu kilit zaten yeni kilide bağımlı. mevcut bağımlılık zinciri (ters sırada) şöyledir: -> #3 (kn->active#4){++++}-{0:0}: lock_acquire+0x68/0x84 __kernfs_remove+0x268/0x380 kernfs_remove_by_name_ns+0x58/0xac sysfs_remove_file_ns+0x18/0x24 device_del+0x15c/0x440 -> #2 (device_links_lock){+.+.}-{3:3}: lock_acquire+0x68/0x84 __mutex_lock+0x9c/0x430 mutex_lock_nested+0x38/0x64 device_link_remove+0x3c/0xa0 _regulator_put.part.0+0x168/0x190 regulator_put+0x3c/0x54 devm_regulator_release+0x14/0x20 -> #1 (regulator_list_mutex){+.+.}-{3:3}: lock_acquire+0x68/0x84 __mutex_lock+0x9c/0x430 mutex_lock_nested+0x38/0x64 regulator_lock_dependent+0x54/0x284 regulator_enable+0x34/0x80 phy_power_on+0x24/0x130 __dwc2_lowlevel_hw_enable+0x100/0x130 dwc2_lowlevel_hw_enable+0x18/0x40 dwc2_hsotg_udc_start+0x6c/0x2f0 gadget_bind_driver+0x124/0x1f4 -> #0 (udc_lock){+.+.}-{3:3}: __lock_acquire+0x1298/0x20cc lock_acquire.part.0+0xe0/0x230 lock_acquire+0x68/0x84 __mutex_lock+0x9c/0x430 mutex_lock_nested+0x38/0x64 usb_udc_uevent+0x54/0xe0 Görünen o ki bu durum, udc_mutex kapsamının çok geniş olmasından kaynaklanmıştır. Mutex yalnızca udc->driver ile birkaç diğer şeyi korumak amacıyla tasarlanmıştır. Tespit edebildiğim kadarıyla, gadget çekirdeği bir gadget sürücüsünün ->bind veya ->unbind rutinini çağırırken ya da bir UDC başlatılırken veya durdurulurken mutex'in tutulması için hiçbir neden yoktur. (Bu durum, yukarıdaki zincirdeki #1 numaralı bağlantıyı açıklar; burada mutex, sürücü probinglemasının bir parçası olarak dwc2_hsotg_udc başlatılırken tutulmaktadır.) Gadget sürücülerinin ->disconnect geri çağırmaları sorunludur. usb_gadget_disconnect() artık udc_mutex'i alacak olsa da, usb_gadget_bind_driver() içinde mutex'in serbest bırakıldığı an ile ->bind geri çağırmasının tetiklendiği an arasında bir boşluk vardır. Eğer bu boşluk sırasında bir bağlantı kesilmesi meydana gelirse, sürücünün ->bind rutini çalışmadan önce ->disconnect rutini çağrılabilir. Bunun gerçekleşmesini önlemek için, bir UDC'nin gadget sürücüsü yokken bağlanmasını engellemek gerekecektir. Bunun zaten yapılmış olması gerekir ancak öyle görünmemektedir; şu anda usb_gadget_connect() fonksiyonunda bununla ilgili bir kontrol bulunmamaktadır. Böyle bir kontrol daha sonra eklenmelidir. Bir sysfs geri çağırması olduğu için rastgele zamanlarda udc->driver referansını çözebilen soft_connect_store() fonksiyonunda belirli bir düzeyde karşılıklı dışlama (mutual exclusion) gereklidir. Buradaki çözüm, udc_mutex yerine gadget'ın cihaz kilidini (device lock) almaktır. Sürücü çekirdeği, sürücü bağlama ve ayırma işlemleri sırasında cihaz kilidinin her zaman tutulduğunu garanti ettiğinden, bu işlem soft_connect_store() içindeki erişimleri udc->driver üzerindeki herhangi bir değişiklikle karşılıklı olarak dışlayacaktır. Son olarak, udc_mutex'i tutması gereken ancak şu anda tutmayan bir yer olduğu ortaya çıkmıştır: function_show() rutininin udc->driver referansını çözerken korunmaya ihtiyacı vardır. Eksik olan lock ve unlock çağrıları eklenmiştir.

ÖnemOrta
CVSS5.5
İstismar olasılığı—
ÜrünLinux Kernel
Yayın18 Haz 2025
İlk görülme18 Haz 2025

Nasıl düzeltilir

Kaynaklarda bu zafiyet için düzeltilmiş sürüm ya da yama bağlantısı yok.

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel5.19.7, 6.0—

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.

Intelligence 360 paketinde

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.