CVE-2022-49943
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.
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ün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 5.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.
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.