CVE-2026-89732
Açıklama
Linux kernel'da aşağıdaki güvenlik açığı giderilmiştir: usb: gadget: f_fs: ep0 okuma döngüsü sırasında deadlock oluşmasını önleme Şu anda ffs_ep0_read(), bir olay beklemek için uyku moduna geçmeye hazırlandığında ffs->mutex kilidini tutmaktadır. Bekleyen herhangi bir kurulum olayı olmadığında, mutex hala tutulurken wait_event_interruptible_exclusive_locked_irq() fonksiyonunu çağırır. Bekleme makrosu, uyumadan önce waitqueue spinlock kilidini kasıtlı olarak bırakır ancak mutex kilidini bırakmaz. Eğer bir kullanıcı alanı (userspace) daemon'ı read() aracılığıyla ep0'ı sorguluyorsa ve gadget, configfs üzerinden asenkron olarak kaldırılıyorsa (örneğin, echo "" > UDC), bir deadlock meydana gelebilir: 1. configfs kaldırma işlemi, FUNCTIONFS_UNBIND olayını kuyruğa alan functionfs_unbind() fonksiyonunu çağırır. 2. Daemon uyanır, olayı tüketir ve mutex kilidini bırakır. 3. Ancak, eğer daemon çıkış yapmadan önce döngüye girerse ve hemen başka bir read() işlemi başlatırsa, ffs->mutex kilidini yeniden alır ve tekrar kesilebilir (interruptible) uykuya geçer. 4. Bu sırada, functionfs_unbind() yürütülmeye devam eder ve ep0req'i kaldırmak için ffs->mutex kilidini almaya çalışır. 5. Kernel deadlock durumuna düşer; çünkü configfs iş parçacığı mutex kilidini beklerken kesilemez (uninterruptible) uykuda takılır, kullanıcı alanı daemon'ı ise artık hiçbir olay gelmeyeceği için mutex kilidini sonsuza dek tutarak kesilebilir uykuda kalır. Bunu düzeltmek için, uykuya geçmeden önce hem waitqueue spinlock hem de ffs->mutex kilitlerini bırakıyoruz ve bunun yerine wait_event_interruptible_exclusive() kullanıyoruz. Uyandığımızda, mutex kilidini güvenli bir şekilde yeniden almak ve durum makinesini yeniden değerlendirmek için `retry` etiketine geri dönüyoruz. ffs->mutex tutulurken uyumayarak, gadget kaldırma işlemlerini (mutex gerektiren) kullanıcı alanı sorgulamalarından doğal olarak ayırmış oluyoruz.
Nasıl düzeltilir
- Linux Linuxfbe3db4b650c284df8eb4cb68eebcf270cf861b5, 30430509c156e1df2bdafd5f1cadb160e53db5d6, bafddd0f20b5228760be303aa69c58502e92309c, b0a6bfac0c3c3edf5b2ecaee87a09234601fe78d, fd20cc68bbdb5620696ac108e8f2efd180fe2c1a, 34e88f53614640b59039a46717fb6142e9871022, eac233e63f9db82ba874e3cccafaafab162999e0, 569dd7e5dcffe1e1c6b26ca2cd3be57eb433e082 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | ddf8abd2599491cbad959c700b90ba72a5dce8d0 ≤ v < fbe3db4b650c284df8eb4cb68eebcf270cf861b5, ddf8abd2599491cbad959c700b90ba72a5dce8d0 ≤ v < 30430509c156e1df2bdafd5f1cadb160e53db5d6, ddf8abd2599491cbad959c700b90ba72a5dce8d0 ≤ v < bafddd0f20b5228760be303aa69c58502e92309c, ddf8abd2599491cbad959c700b90ba72a5dce8d0 ≤ v < b0a6bfac0c3c3edf5b2ecaee87a09234601fe78d, ddf8abd2599491cbad959c700b90ba72a5dce8d0 ≤ v < fd20cc68bbdb5620696ac108e8f2efd180fe2c1a, ddf8abd2599491cbad959c700b90ba72a5dce8d0 ≤ v < 34e88f53614640b59039a46717fb6142e9871022, ddf8abd2599491cbad959c700b90ba72a5dce8d0 ≤ v < eac233e63f9db82ba874e3cccafaafab162999e0, ddf8abd2599491cbad959c700b90ba72a5dce8d0 ≤ v < 569dd7e5dcffe1e1c6b26ca2cd3be57eb433e082, 2.6.35 | fbe3db4b650c284df8eb4cb68eebcf270cf861b5, 30430509c156e1df2bdafd5f1cadb160e53db5d6, bafddd0f20b5228760be303aa69c58502e92309c, b0a6bfac0c3c3edf5b2ecaee87a09234601fe78d, fd20cc68bbdb5620696ac108e8f2efd180fe2c1a, 34e88f53614640b59039a46717fb6142e9871022, eac233e63f9db82ba874e3cccafaafab162999e0, 569dd7e5dcffe1e1c6b26ca2cd3be57eb433e082 |
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.